Aracılığıyla paylaş


XML Güncelleme Gramları (SQLXML 4.0) Kullanılarak Veri Güncelleme

Şunlar için geçerlidir:SQL ServerAzure SQL Veritabanı

Mevcut verileri güncellerken hem <öncesi> hem de <sonrası> bloklarını belirtmeniz gerekir. Öncesi> ve sonrası bloklarında< belirtilen öğeler, istenen değişikliği tanımlar.>< Updategram, veritabanındaki mevcut kayıt(lar)ı tanımlamak için before> bloğunda belirtilen< eleman(lar)ı kullanır. After> blokundaki< ilgili eleman(lar), güncelleme işlemi yürütüldükten sonra kayıtların nasıl görünmesi gerektiğini gösterir. Bu bilgilerden, updategram after> bloğuna< uyan bir SQL ifadesi oluşturur. Updategram daha sonra bu ifadeyi kullanarak veritabanını günceller.

Bu, bir güncelleme işlemi için updategram formatıdır:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
<updg:sync [mapping-schema="SampleSchema.xml"]  >  
   <updg:before>  
      <ElementName [updg:id="value"] .../>  
      [<ElementName [updg:id="value"] .../> ... ]  
   </updg:before>  
   <updg:after>  
      <ElementName [updg:id="value"] ... />  
      [<ElementName [updg:id="value"] .../> ...]  
   </updg:after>  
</updg:sync>  
</ROOT>  

<Güncelleme: Önce>
Before> blokundaki< öğeler, veritabanı tablolarındaki mevcut kayıtları tanımlar.

<Güncelleme:Sonrası>
After bloğundaki <öğeler, before bloğunda belirtilen kayıtların güncellemeler uygulandıktan sonra nasıl görünmesi gerektiğini açıklar.><>

Mapping-schema özniteliği, updategram tarafından kullanılacak eşleme şemasını tanımlar. Eğer updategram bir eşleme şeması belirliyorsa, öncesi> ve sonrası bloklarında< belirtilen eleman ve öznitelik adları şemadaki isimlerle eşleşmelidir.>< Eşleme şeması, bu eleman veya öznitelik isimlerini veritabanı tablosu ve sütun adlarına eşler.

Bir updategram bir şema belirtmiyorsa, updategam varsayılan eşleme kullanır. Varsayılan eşlemede, updategram'da belirtilen ElementName> veritabanı tablosuna eşlenir ve alt öğeler veya öznitelikler veritabanı sütunlarına eşlenir.<

Before bloğundaki <> bir elemanın, veritabanındaki yalnızca bir tablo satırıyla eşleşmesi gerekir. Öğe birden fazla tablo satırıyla eşleşiyorsa veya herhangi bir tablo satırıyla eşleşmiyorsa, updategram hata döndürür ve tüm <senkronizasyon> bloğunu iptal eder.

Bir updategram birden fazla <senkronizasyon> bloğu içerebilir. Her <senkronizasyon> bloğu bir işlem olarak kabul edilir. Her <senkronizasyon> bloğunda birden fazla< önce> ve <sonra> bloğu olabilir. Örneğin, mevcut kayıtlardan ikisini güncelliyorsanız, güncellenen her kayıt için bir tane öncesi> ve sonrası çifti< belirtebilirsiniz.><

updg:id Özniteliğinin Kullanımı

Önceden> ve sonra bloklarında birden fazla öğe belirtildiğinde<, önce ve sonra bloklarındaki satırları<>işaretlemek için updg:id niteliği kullanın.<><> İşleme mantığı, önceki bloktaki hangi kaydın <> after bloktaki kaydla <> eşleşeceğini belirlemek için bu bilgiyi kullanır.

Aşağıdaki özelliklerden biri varsa updg:id özelliği gerekli değildir (ancak önerilir):

  • Belirtilen eşleme şemasındaki elemanlar üzerinde sql:key-fields özniteliği tanımlanmıştır.

  • Güncelleme gramında anahtar alan(lar) için bir veya daha fazla özel değer sağlanır.

Eğer her biri ise, updategram sql:key-fields'da belirtilen anahtar sütunları kullanarak önceki> ve sonrası bloklarındaki öğeleri< eşleştirir.><

Eğer eşleme şeması anahtar sütunlarını tanımlamıyorsa ( sql:key-fields kullanılarak) veya updategram bir anahtar sütun değerini güncelliyorsa, updg:id belirtmeniz gerekir.

Önceden> ve sonra bloklarında tanımlanan< kayıtların aynı sırada olması gerekmez.>< updg:id özniteliği, önce> ve sonra bloklarında belirtilen< elemanlar arasındaki ilişkiyi zorunlu kılar.><

Eğer ön> blokta bir eleman< ve after> blokta sadece bir karşılık gelen eleman< belirtirseniz, updg:id kullanmak gerekmez. Ancak, belirsizlikten kaçınmak için yine de updg:id belirtmeniz tavsiye edilir.

Örnekler

updategram örneklerini kullanmadan önce aşağıdakilere dikkat edin:

  • Örneklerin çoğu varsayılan eşlemeyi kullanır (yani güncelleştirme birimi içinde eşleme şeması belirtilmez). Eşleme şemalarını kullanan güncelleştirme birimlerinin diğer örnekleri için bkz. Güncelleştirme Birimi içinde Ek Açıklamalı Eşleme Şeması Belirtme (SQLXML 4.0).

  • Örneklerin çoğu AdventureWorks örnek veritabanını kullanıyor. Tüm güncelleştirmeler bu veritabanındaki tablolara uygulanır. AdventureWorks veritabanını geri kazanabilirsiniz.

A. Bir kaydı güncellemek

Aşağıdaki güncelleme gramı, AdventureWorks veritabanındaki Kişi.İletişim tablosunda çalışan soyadını Fuller olarak günceller. Güncelleme gramı herhangi bir eşleme şeması belirtmez; Bu nedenle, updategram varsayılan eşleme kullanır.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
<updg:sync >  
<updg:before>  
   <Person.Contact ContactID="1" />  
</updg:before>  
<updg:after>  
   <Person.Contact LastName="Abel-Achong" />  
</updg:after>  
</updg:sync>  
</ROOT>  

Önceki> blokta< tanımlanan kayıt, veritabanındaki mevcut kaydı temsil eder. updategram, kaydı aramak için before> bloğunda belirtilen< tüm sütun değerlerini kullanır. Bu updategramda, <before> bloğu yalnızca ContactID sütununu sağlar; bu nedenle updategram kaydı aramak için yalnızca değeri kullanır. Eğer bu bloğa Soyadı değerini eklerseniz, updategram hem ContactID hem de Soyadı değerlerini kullanarak arama yapar.

Bu updategramda, after> bloğu< yalnızca Soyadı sütun değerini sağlar çünkü değiştirilen tek değer budur.

Güncelleme gramını test etmek için
  1. Yukarıdaki updategram şablonunu kopyalayıp metin dosyasına yapıştırın. Dosyayı UpdateLastName.xmlolarak kaydet.

  2. Updategram'ı çalıştırmak için SQLXML 4.0 Test Script'i (Sqlxml4test.vbs) oluşturun ve kullanın.

    Daha fazla bilgi için bkz. SQLXML 4.0 Sorguları Yürütmek için ADO Kullanma.

B. Birden fazla kayıt güncellemesi updg:id özniteliği kullanılarak

Bu örnekte, updategram AdventureWorks veritabanındaki HumanResources.Shift tablosunda iki güncelleme gerçekleştirir:

  • Orijinal gündüz vardiyasının adı 7:00'da başlayan "Gündüz"den "Erken Sabah"a değiştirilir.

  • Saat 10:00'da başlayan "Late Morning" adlı yeni bir vardiya ekleniyor.

updategram'da, updg:id özniteliği, önceki> ve sonrası bloklarındaki< öğeler arasında ilişkilendirmeler oluşturur.><

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
       <HumanResources.Shift updg:id="x" Name="Day" />  
    </updg:before>  
    <updg:after>  
      <HumanResources.Shift updg:id="y" Name="Late Morning"   
                            StartTime="1900-01-01 10:00:00.000"  
                            EndTime="1900-01-01 18:00:00.000"  
                            ModifiedDate="2004-06-01 00:00:00.000"/>  
      <HumanResources.Shift updg:id="x" Name="Early Morning" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  

Updg:id özniteliğinin, before> bloğundaki HumanResources.Shift öğesinin< ilk <örneğini after <bloktaki ikinci HumanResources.Shift> öğesi <> ile eşleştirdiğine dikkat edin.>

Güncelleme gramını test etmek için
  1. Yukarıdaki updategram şablonunu kopyalayıp metin dosyasına yapıştırın. Dosyayı UpdateMultipleRecords.xmlolarak kaydet.

  2. Updategram'ı çalıştırmak için SQLXML 4.0 Test Script'i (Sqlxml4test.vbs) oluşturun ve kullanın.

    Daha fazla bilgi için bkz. SQLXML 4.0 Sorguları Yürütmek için ADO Kullanma.

C. Birden fazla <öncesi> ve <sonrası> blokunun belirtilmesi

Belirsizliği önlemek için, updategramı Örnek B'de birden fazla< önce> ve <sonra> blok çifti kullanarak yazabilirsiniz. Önceden> ve sonra çiftlerini belirtmek,< birden fazla güncellemeyi en az kafa karışıklığıyla belirtmenin bir yoludur.>< Ayrıca, öncesi> ve sonrası bloklarının her< biri en fazla bir eleman belirtiyorsa, updg:id niteliğini kullanmanıza gerek yoktur.><

Uyarı

Bir çift oluşturmak için, <after> etiketi hemen karşılık gelen< ön> etiketini takip etmelidir.

Aşağıdaki güncelleme gramında, ilk <öncesi> ve <sonrası> çifti gündüz vardiyasının vardiyasının adını günceller. İkinci çift yeni bir shift kaydı yerleştirir.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
       <HumanResources.Shift ShiftID="1" Name="Day" />  
    </updg:before>  
    <updg:after>  
      <HumanResources.Shift Name="Early Morning" />  
    </updg:after>  
    <updg:before>  
    </updg:before>  
    <updg:after>  
      <HumanResources.Shift Name="Late Morning"   
                            StartTime="1900-01-01 10:00:00.000"  
                            EndTime="1900-01-01 18:00:00.000"  
                            ModifiedDate="2004-06-01 00:00:00.000"/>  
    </updg:after>  
  </updg:sync>  
</ROOT>  
Güncelleme gramını test etmek için
  1. Yukarıdaki updategram şablonunu kopyalayıp metin dosyasına yapıştırın. Dosyayı UpdateMultipleBeforeAfter.xmlolarak kaydet.

  2. Updategram'ı çalıştırmak için SQLXML 4.0 Test Script'i (Sqlxml4test.vbs) oluşturun ve kullanın.

    Daha fazla bilgi için bkz. SQLXML 4.0 Sorguları Yürütmek için ADO Kullanma.

D. Birden fazla <senkronizasyon> bloğunun belirlenmesi

Bir updategram'da birden fazla <senkronizasyon> bloğunu belirtebilirsiniz. Belirtilen her <senkronizasyon> bloğu bağımsız bir işlemdir.

Aşağıdaki updategramda, ilk <senkronizasyon> bloğu Sales.Customer tablosunda bir kaydı günceller. Basitlik adına, updategram yalnızca gerekli sütun değerlerini belirtir; kimlik değeri (CustomerID) ve güncellenen değer (SalesPersonID) olarak belirtilir.

İkinci <senkronizasyon> bloğu, Sales.SalesOrderHeader tablosuna iki kayıt ekler. Bu tablo için SalesOrderID, IDENTITY tipi bir sütundur. Bu nedenle, updategram Sales.SalesOrderHeader> öğelerinin her <birinde SalesOrderID'nin değerini belirtmez.

Birden fazla <senkronizasyon> bloğu belirtmek faydalıdır çünkü ikinci <senkronizasyon> bloğu (bir işlem) Sales.SalesOrderHeader tablosuna kayıt eklemezse, ilk <senkronizasyon> bloğu yine de Sales.Customer tablosunda müşteri kaydını güncelleyebiliyor.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
      <Sales.Customer CustomerID="1" SalesPersonID="280" />  
    </updg:before>  
    <updg:after>  
      <Sales.Customer CustomerID="1" SalesPersonID="283" />  
    </updg:after>  
  </updg:sync>  
  <updg:sync >  
    <updg:before>  
    </updg:before>  
    <updg:after>  
   <Sales.SalesOrderHeader   
             CustomerID="1"  
             RevisionNumber="1"  
             OrderDate="2004-07-01 00:00:00.000"  
             DueDate="2004-07-13 00:00:00.000"  
             OnlineOrderFlag="0"  
             ContactID="378"  
             BillToAddressID="985"  
             ShipToAddressID="985"  
             ShipMethodID="5"  
             SubTotal="24643.9362"  
             TaxAmt="1971.5149"  
             Freight="616.0984"  
             rowguid="01010101-2222-3333-4444-556677889900"  
             ModifiedDate="2004-07-08 00:00:00.000" />  
   <Sales.SalesOrderHeader  
             CustomerID="1"  
             RevisionNumber="1"  
             OrderDate="2004-07-01 00:00:00.000"  
             DueDate="2004-07-13 00:00:00.000"  
             OnlineOrderFlag="0"  
             ContactID="378"  
             BillToAddressID="985"  
             ShipToAddressID="985"  
             ShipMethodID="5"  
             SubTotal="1000.0000"  
             TaxAmt="0.0000"  
             Freight="0.0000"  
             rowguid="10101010-2222-3333-4444-556677889900"  
             ModifiedDate="2004-07-09 00:00:00.000" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  
Güncelleme gramını test etmek için
  1. Yukarıdaki updategram şablonunu kopyalayıp metin dosyasına yapıştırın. Dosyayı UpdateMultipleSyncs.xmlolarak kaydet.

  2. Updategram'ı çalıştırmak için SQLXML 4.0 Test Script'i (Sqlxml4test.vbs) oluşturun ve kullanın.

    Daha fazla bilgi için bkz. SQLXML 4.0 Sorguları Yürütmek için ADO Kullanma.

E. Bir eşleme şeması kullanımı

Bu örnekte, updategram mapping-schema özniteliği kullanılarak bir eşleme şemasını belirtir. (Varsayılan eşleme yoktur; yani, eşleme şeması güncelleme gramındaki öğeler ve özniteliklerin veritabanı tabloları ve sütunlarına gerekli eşlemesini sağlar.)

updategram'da belirtilen öğeler ve nitelikler, eşleme şemasındaki öğelere ve özniteliklere atıfta bulunur.

Aşağıdaki XSD eşleme şeması <, Customer>, <Order> ve <OD> öğeleri içerir ve bunlar veritabanındaki Sales.Customer, Sales.SalesOrderHeader ve Sales.SalesOrderDetail tablolarına eşlenir.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
<xsd:annotation>  
  <xsd:appinfo>  
    <sql:relationship name="CustomerOrder"  
          parent="Sales.Customer"  
          parent-key="CustomerID"  
          child="Sales.SalesOrderHeader"  
          child-key="CustomerID" />  
  
    <sql:relationship name="OrderOD"  
          parent="Sales.SalesOrderHeader"  
          parent-key="SalesOrderID"  
          child="Sales.SalesOrderDetail"  
          child-key="SalesOrderID" />  
  </xsd:appinfo>  
</xsd:annotation>  
  
  <xsd:element name="Customer" sql:relation="Sales.Customer" >  
   <xsd:complexType>  
     <xsd:sequence>  
        <xsd:element name="Order"   
                     sql:relation="Sales.SalesOrderHeader"  
                     sql:relationship="CustomerOrder" >  
           <xsd:complexType>  
              <xsd:sequence>  
                <xsd:element name="OD"   
                             sql:relation="Sales.SalesOrderDetail"  
                             sql:relationship="OrderOD" >  
                 <xsd:complexType>  
                  <xsd:attribute name="SalesOrderID" type="xsd:integer" />  
                  <xsd:attribute name="ProductID" type="xsd:integer" />  
                  <xsd:attribute name="UnitPrice" type="xsd:decimal" />  
                  <xsd:attribute name="OrderQty" type="xsd:integer" />  
                  <xsd:attribute name="UnitPriceDiscount" type="xsd:decimal" />   
                 </xsd:complexType>  
                </xsd:element>  
              </xsd:sequence>  
              <xsd:attribute name="CustomerID" type="xsd:string" />  
              <xsd:attribute name="SalesOrderID" type="xsd:integer" />  
              <xsd:attribute name="OrderDate" type="xsd:date" />  
           </xsd:complexType>  
        </xsd:element>  
      </xsd:sequence>  
      <xsd:attribute name="CustomerID"   type="xsd:string" />   
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

Bu eşleme şeması (UpdategramMappingSchema.xml) aşağıdaki güncelleme gramında belirtilmiştir. updategram, belirli bir sipariş için Sales.SalesOrderDetail tablosuna bir sipariş detayı öğesi ekler. updategram, iç içe bir eleman içerir: bir Order> öğesinin içinde< iç içe yerleştirilmiş bir< OD> elemanı. Bu iki eleman arasındaki birincil anahtar/yabancı anahtar ilişkisi eşleme şemasında belirtilmiştir.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync mapping-schema="UpdategramMappingSchema.xml" >  
    <updg:before>  
       <Order SalesOrderID="43659" />  
    </updg:before>  
    <updg:after>  
      <Order SalesOrderID="43659" >  
          <OD ProductID="776" UnitPrice="2329.0000"  
              OrderQty="2" UnitPriceDiscount="0.0" />  
      </Order>  
    </updg:after>  
  </updg:sync>  
</ROOT>  
Güncelleme gramını test etmek için
  1. Yukarıdaki eşleme şemasını kopyalayıp metin dosyasına yapıştırın. Dosyayı UpdategramMappingSchema.xmlolarak kaydet.

  2. Yukarıdaki updategram şablonunu kopyalayıp metin dosyasına yapıştırın. Dosyayı, eşleme şemasını kaydetmek için kullanılan klasöre UpdateWithMappingSchema.xml olarak kaydet (UpdategramMappingSchema.xml).

  3. Updategram'ı çalıştırmak için SQLXML 4.0 Test Script'i (Sqlxml4test.vbs) oluşturun ve kullanın.

    Daha fazla bilgi için bkz. SQLXML 4.0 Sorguları Yürütmek için ADO Kullanma.

Eşleme şemalarını kullanan güncelleştirme birimlerinin diğer örnekleri için bkz. Güncelleştirme Birimi içinde Ek Açıklamalı Eşleme Şeması Belirtme (SQLXML 4.0).

F. IDREFS nitelikleriyle eşleme şeması kullanımı

Bu örnek, updategramların eşleme şemasında IDREFS niteliklerini birden fazla tablodaki kayıtları güncellemek için nasıl kullandığını göstermektedir. Bu örnek için, veritabanının aşağıdaki tablolardan oluştuğu varsayım:

  • Öğrenci (StudentID, Soyad)

  • Ders(CourseID, CourseName)

  • Kayıt (StudentID, CourseID)

Bir öğrenci birçok derse kaydolabildiği ve bir dersin çok öğrencisi olabileceği için, üçüncü tablo olan Kayıt tablosu bu M:N ilişkisini temsil etmek için gereklidir.

Aşağıdaki XSD eşleme şeması, Öğrenci>, Ders ve Kayıt öğeleri kullanılarak< tabloların XML görünümünü sağlar.<><> Eşleme şemasındaki IDREFS nitelikleri, bu elemanlar arasındaki ilişkiyi belirtir. Kurs> öğesindeki<StudentIDList özniteliği, Kayıt tablosunda StudentID sütununa atıfta bulunan IDREFS tipi bir özniteliktir. Benzer şekilde, Öğrenci> öğesindeki<EnrolledIn özniteliği, Kayıt tablosunda CourseID sütununa atıfta bulunan IDREFS tipi bir özniteliktir.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
<xsd:annotation>  
  <xsd:appinfo>  
    <sql:relationship name="StudentEnrollment"  
          parent="Student"  
          parent-key="StudentID"  
          child="Enrollment"  
          child-key="StudentID" />  
  
    <sql:relationship name="CourseEnrollment"  
          parent="Course"  
          parent-key="CourseID"  
          child="Enrollment"  
          child-key="CourseID" />  
  </xsd:appinfo>  
</xsd:annotation>  
  
  <xsd:element name="Course" sql:relation="Course"   
                             sql:key-fields="CourseID" >  
    <xsd:complexType>  
    <xsd:attribute name="CourseID"  type="xsd:string" />   
    <xsd:attribute name="CourseName"   type="xsd:string" />   
    <xsd:attribute name="StudentIDList" sql:relation="Enrollment"  
                 sql:field="StudentID"  
                 sql:relationship="CourseEnrollment"   
                                     type="xsd:IDREFS" />  
  
    </xsd:complexType>  
  </xsd:element>  
  <xsd:element name="Student" sql:relation="Student" >  
    <xsd:complexType>  
    <xsd:attribute name="StudentID"  type="xsd:string" />   
    <xsd:attribute name="LastName"   type="xsd:string" />   
    <xsd:attribute name="EnrolledIn" sql:relation="Enrollment"  
                 sql:field="CourseID"  
                 sql:relationship="StudentEnrollment"   
                                     type="xsd:IDREFS" />  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

Bu şemayı updategram'da belirttiğinizde ve Course tablosuna kayıt eklediğinizde, updategram Course tablosuna yeni bir kurs kaydı ekler. StudentIDList özelliği için bir veya daha fazla yeni öğrenci kimliği belirtirseniz, updategram ayrıca her yeni öğrenci için Kayıt tablosuna bir kayıt ekler. Güncelleme gramı, Kayıt tablosuna hiçbir tekrarın eklenmemesini sağlar.

Güncelleme gramını test etmek için
  1. Sanal kökte belirtilen veritabanında şu tabloları oluşturun:

    CREATE TABLE Student(StudentID varchar(10) primary key,   
                         LastName varchar(25))  
    CREATE TABLE Course(CourseID varchar(10) primary key,   
                        CourseName varchar(25))  
    CREATE TABLE Enrollment(StudentID varchar(10)   
                                      references Student(StudentID),  
                           CourseID varchar(10)   
                                      references Course(CourseID))  
    
  2. Bu örnek veriyi ekleyin:

    INSERT INTO Student VALUES ('S1','Davoli')  
    INSERT INTO Student VALUES ('S2','Fuller')  
    
    INSERT INTO Course VALUES  ('CS101', 'C Programming')  
    INSERT INTO Course VALUES  ('CS102', 'Understanding XML')  
    
    INSERT INTO Enrollment VALUES ('S1', 'CS101')  
    INSERT INTO Enrollment VALUES ('S1', 'CS102')  
    
  3. Yukarıdaki eşleme şemasını kopyalayıp metin dosyasına yapıştırın. Dosyayı SampleSchema.xmlolarak kaydet.

  4. Updategram'ı (SampleUpdategram) önceki adımda eşleme şemasını kaydetmek için kullanılan aynı klasöre kaydedin. (Bu güncelleme gramı, CS102 kursundan StudentID="1" olan bir öğrenciyi düşürüyor.)

    <ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
      <updg:sync mapping-schema="SampleSchema.xml" >  
        <updg:before>  
            <Student updg:id="x" StudentID="S1" LastName="Davolio"  
                                 EnrolledIn="CS101 CS102" />  
        </updg:before>  
        <updg:after >  
            <Student updg:id="x" StudentID="S1" LastName="Davolio"  
                                 EnrolledIn="CS101" />  
        </updg:after>  
      </updg:sync>  
    </ROOT>  
    
  5. Updategram'ı çalıştırmak için SQLXML 4.0 Test Script'i (Sqlxml4test.vbs) oluşturun ve kullanın.

    Daha fazla bilgi için bkz. SQLXML 4.0 Sorguları Yürütmek için ADO Kullanma.

  6. Önceki adımlarda açıklandığı gibi aşağıdaki güncelleme gramını kaydedin ve çalıştırın. updategram, StudentID="1" ile öğrenciyi Kayıt tablosuna bir kayıt ekleyerek tekrar CS102 dersine ekler.

    <ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
      <updg:sync mapping-schema="SampleSchema.xml" >  
        <updg:before>  
            <Student updg:id="x" StudentID="S1" LastName="Davolio"  
                                 EnrolledIn="CS101" />  
        </updg:before>  
        <updg:after >  
            <Student updg:id="x" StudentID="S1" LastName="Davolio"  
                                 EnrolledIn="CS101 CS102" />  
        </updg:after>  
      </updg:sync>  
    </ROOT>  
    
  7. Bu sonraki güncelleme gramını önceki adımlarda açıklandığı gibi kaydedin ve çalıştırın. Bu güncelleme üç yeni öğrenciyi dahil eder ve onları CS101 dersine kaydeder. Yine, IDREFS ilişkisi kayıtları Kayıt tablosuna ekler.

    <ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
      <updg:sync mapping-schema="SampleSchema.xml" >  
        <updg:before>  
           <Course updg:id="y" CourseID="CS101"   
                               CourseName="C Programming" />  
        </updg:before>  
        <updg:after >  
           <Student updg:id="x1" StudentID="S3" LastName="Leverling" />  
           <Student updg:id="x2" StudentID="S4" LastName="Pecock" />  
           <Student updg:id="x3" StudentID="S5" LastName="Buchanan" />  
           <Course updg:id="y" CourseID="CS101"  
                               CourseName="C Programming"  
                               StudentIDList="S3 S4 S5" />  
        </updg:after>  
      </updg:sync>  
    </ROOT>  
    

Bu eşdeğer XDR şemasıdır:

<?xml version="1.0" ?>  
<Schema xmlns="urn:schemas-microsoft-com:xml-data"  
        xmlns:dt="urn:schemas-microsoft-com:datatypes"  
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <ElementType name="Enrollment" sql:relation="Enrollment" sql:key-fields="StudentID CourseID">  
    <AttributeType name="StudentID" dt:type="id" />  
    <AttributeType name="CourseID" dt:type="id" />  
  
    <attribute type="StudentID" />  
    <attribute type="CourseID" />  
  </ElementType>  
  <ElementType name="Course" sql:relation="Course" sql:key-fields="CourseID">  
    <AttributeType name="CourseID" dt:type="id" />  
    <AttributeType name="CourseName" />  
  
    <attribute type="CourseID" />  
    <attribute type="CourseName" />  
  
    <AttributeType name="StudentIDList" dt:type="idrefs" />  
    <attribute type="StudentIDList" sql:relation="Enrollment" sql:field="StudentID" >  
        <sql:relationship  
                key-relation="Course"  
                key="CourseID"  
                foreign-relation="Enrollment"  
                foreign-key="CourseID" />  
    </attribute>  
  
  </ElementType>  
  <ElementType name="Student" sql:relation="Student">  
    <AttributeType name="StudentID" dt:type="id" />  
     <AttributeType name="LastName" />  
  
    <attribute type="StudentID" />  
    <attribute type="LastName" />  
  
    <AttributeType name="EnrolledIn" dt:type="idrefs" />  
    <attribute type="EnrolledIn" sql:relation="Enrollment" sql:field="CourseID" >  
        <sql:relationship  
                key-relation="Student"  
                key="StudentID"  
                foreign-relation="Enrollment"  
                foreign-key="StudentID" />  
    </attribute>  
  
    <element type="Enrollment" sql:relation="Enrollment" >  
        <sql:relationship key-relation="Student"  
                          key="StudentID"  
                          foreign-relation="Enrollment"  
                          foreign-key="StudentID" />  
    </element>  
  </ElementType>  
  
</Schema>  

Eşleme şemalarını kullanan güncelleştirme birimlerinin diğer örnekleri için bkz. Güncelleştirme Birimi içinde Ek Açıklamalı Eşleme Şeması Belirtme (SQLXML 4.0).

Ayrıca Bkz.

Güncelleştirme Birimi Güvenlik Konuları (SQLXML 4.0)