Menentukan Skema Pemetaan Anotasi dalam Updategram (SQLXML 4.0)

Berlaku untuk:Database SQL ServerAzure SQL

Topik ini menjelaskan bagaimana skema pemetaan (XSD atau XDR) yang ditentukan dalam updategram digunakan untuk memproses pembaruan. Dalam updategram, Anda dapat memberikan nama skema pemetaan anotasi untuk digunakan dalam memetakan elemen dan atribut dalam updategram ke tabel dan kolom di Microsoft SQL Server. Ketika skema pemetaan ditentukan dalam updategram, elemen dan nama atribut yang ditentukan dalam updategram harus memetakan ke elemen dan atribut dalam skema pemetaan.

Untuk menentukan skema pemetaan, Anda menggunakan atribut mapping-schema dari <elemen sinkronisasi> . Contoh berikut menunjukkan dua updategram: satu yang menggunakan skema pemetaan sederhana, dan yang menggunakan skema yang lebih kompleks.

Catatan

Dokumentasi ini mengasumsikan bahwa Anda terbiasa dengan templat dan dukungan skema pemetaan di SQL Server. Untuk informasi selengkapnya, lihat Pengantar Skema XSD Terannotasi (SQLXML 4.0). Untuk aplikasi warisan yang menggunakan XDR, lihat Skema XDR Anotasi (Tidak digunakan lagi di SQLXML 4.0).

Berurusan dengan Jenis Data

Jika skema menentukan tipe data gambar, biner, atau varbinary SQL Server (dengan menggunakan sql:datatype) dan tidak menentukan jenis data XML, updategram mengasumsikan bahwa jenis data XML adalah basis biner 64. Jika data Anda adalah jenis bin.base , Anda harus secara eksplisit menentukan jenis (dt:type=bin.base atau type="xsd:hexBinary").

Jika skema menentukan jenis data XSD dateTime, tanggal, atau waktu, Anda juga harus menentukan jenis data SQL Server yang sesuai dengan menggunakan sql:datatype="dateTime".

Saat menangani parameter SQL Server jenis uang, Anda harus secara eksplisit menentukan sql:datatype="money" pada simpul yang sesuai dalam skema pemetaan.

Contoh

Untuk membuat sampel kerja menggunakan contoh berikut, Anda harus memenuhi persyaratan yang ditentukan dalam Persyaratan untuk Menjalankan Contoh SQLXML.

J. Membuat updategram dengan skema pemetaan sederhana

Skema XSD berikut (SampleSchema.xml) adalah skema pemetaan yang memetakan <elemen Pelanggan> ke tabel Sales.Customer:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
  <xsd:element name="Customer" sql:relation="Sales.Customer" >  
   <xsd:complexType>  
        <xsd:attribute name="CustID"    
                       sql:field="CustomerID"   
                       type="xsd:string" />  
        <xsd:attribute name="RegionID"    
                       sql:field="TerritoryID"    
                       type="xsd:string" />  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

Updategram berikut menyisipkan rekaman ke dalam tabel Sales.Customer dan bergantung pada skema pemetaan sebelumnya untuk memetakan data ini dengan benar ke tabel. Perhatikan bahwa updategram menggunakan nama elemen yang sama, <Pelanggan>, seperti yang didefinisikan dalam skema. Ini wajib karena updategram menentukan skema tertentu.

Untuk menguji updategram
  1. Salin kode skema di atas dan tempelkan ke dalam file teks. Simpan file sebagai SampleUpdateSchema.xml.

  2. Salin templat updategram di bawah ini dan tempelkan ke dalam file teks. Simpan file sebagai SampleUpdategram.xml di direktori yang sama tempat Anda menyimpan SampleUpdateSchema.xml.

    <ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
      <updg:sync mapping-schema="SampleUpdateSchema.xml">  
        <updg:before>  
          <Customer CustID="1" RegionID="1"  />  
        </updg:before>  
        <updg:after>  
          <Customer CustID="1" RegionID="2" />  
        </updg:after>  
      </updg:sync>  
    </ROOT>  
    

    Jalur direktori yang ditentukan untuk skema pemetaan (SampleUpdateSchema.xml) relatif terhadap direktori tempat templat disimpan. Jalur absolut juga dapat ditentukan, misalnya:

    mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"  
    
  3. Buat dan gunakan Skrip Pengujian SQLXML 4.0 (Sqlxml4test.vbs) untuk menjalankan templat.

    Untuk informasi selengkapnya, lihat Menggunakan ADO untuk Menjalankan Kueri SQLXML 4.0.

Ini adalah skema XDR yang setara:

<?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="Customer" sql:relation="Sales.Customer" >  
       <AttributeType name="CustID" />  
       <AttributeType name="RegionID" />  
  
       <attribute type="CustID" sql:field="CustomerID" />  
       <attribute type="RegionID" sql:field="TerritoryID" />  
     </ElementType>  
   </Schema>   

B. Menyisipkan rekaman dengan menggunakan hubungan induk-anak yang ditentukan dalam skema pemetaan

Elemen skema dapat terkait. Elemen <sql:relationship> menentukan hubungan induk-anak antara elemen skema. Informasi ini digunakan untuk memperbarui tabel terkait yang memiliki hubungan kunci primer/kunci asing.

Skema pemetaan berikut (SampleSchema.xml) terdiri dari dua elemen, <Urutan> dan <OD>:

<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="OrderOD"  
          parent="Sales.SalesOrderHeader"  
          parent-key="SalesOrderID"  
          child="Sales.SalesOrderDetail"  
          child-key="SalesOrderID" />  
  </xsd:appinfo>  
</xsd:annotation>  
  
  <xsd:element name="Order" sql:relation="Sales.SalesOrderHeader" >  
   <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:schema>  

Updategram berikut menggunakan skema XSD ini untuk menambahkan catatan detail pesanan baru ( <elemen OD> dalam <blok setelah> ) untuk pesanan 43860. Atribut mapping-schema digunakan untuk menentukan skema pemetaan dalam updategram.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync mapping-schema="SampleUpdateSchema.xml" >  
    <updg:before>  
       <Order SalesOrderID="43860" />  
    </updg:before>  
    <updg:after>  
      <Order SalesOrderID="43860" >  
           <OD ProductID="753" UnitPrice="$10.00"  
               Quantity="5" Discount="0.0" />  
      </Order>  
    </updg:after>  
  </updg:sync>  
</ROOT>  
Untuk menguji updategram
  1. Salin kode skema di atas dan tempelkan ke dalam file teks. Simpan file sebagai SampleUpdateSchema.xml.

  2. Salin templat updategram di atas dan tempelkan ke dalam file teks. Simpan file sebagai SampleUpdategram.xml di direktori yang sama tempat Anda menyimpan SampleUpdateSchema.xml.

    Jalur direktori yang ditentukan untuk skema pemetaan (SampleUpdateSchema.xml) relatif terhadap direktori tempat templat disimpan. Jalur absolut juga dapat ditentukan, misalnya:

    mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"  
    
  3. Buat dan gunakan Skrip Pengujian SQLXML 4.0 (Sqlxml4test.vbs) untuk menjalankan templat.

    Untuk informasi selengkapnya, lihat Menggunakan ADO untuk Menjalankan Kueri SQLXML 4.0.

Ini adalah skema XDR yang setara:

<?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="OD" sql:relation="Sales.SalesOrderDetail" >  
    <AttributeType name="SalesOrderID" />  
    <AttributeType name="ProductID" />  
    <AttributeType name="UnitPrice"  dt:type="fixed.14.4" />  
    <AttributeType name="OrderQty" />  
    <AttributeType name="UnitPriceDiscount" />  
  
    <attribute type="SalesOrderID" />  
    <attribute type="ProductID" />  
    <attribute type="UnitPrice" />  
    <attribute type="OrderQty" />  
    <attribute type="UnitPriceDiscount" />  
</ElementType>  
  
<ElementType name="Order" sql:relation="Sales.SalesOrderHeader" >  
    <AttributeType name="CustomerID" />  
    <AttributeType name="SalesOrderID" />  
    <AttributeType name="OrderDate" />  
  
    <attribute type="CustomerID" />  
    <attribute type="SalesOrderID" />  
    <attribute type="OrderDate" />  
    <element type="OD" >  
             <sql:relationship   
                   key-relation="Sales.SalesOrderHeader"  
                   key="SalesOrderID"  
                   foreign-key="SalesOrderID"  
                   foreign-relation="Sales.SalesOrderDetail" />  
    </element>  
</ElementType>  
</Schema>  

C. Menyisipkan rekaman dengan menggunakan hubungan induk-anak dan anotasi terbalik yang ditentukan dalam skema XSD

Contoh ini menggambarkan bagaimana logika updategram menggunakan hubungan induk-anak yang ditentukan dalam XSD untuk memproses pembaruan, dan bagaimana anotasi terbalik digunakan. Untuk informasi selengkapnya tentang anotasi terbalik , lihat Menentukan Atribut sql:inverse pada sql:relationship (SQLXML 4.0).

Contoh ini mengasumsikan bahwa tabel berikut berada dalam database tempdb :

  • Cust (CustomerID, CompanyName), di mana CustomerID adalah kunci primer

  • Ord (OrderID, CustomerID), di mana CustomerID adalah kunci asing yang mengacu pada CustomerID kunci primer dalam Cust tabel.

Updategram menggunakan skema XSD berikut untuk menyisipkan rekaman ke dalam tabel Cust dan Ord :

<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="OrdCust" inverse="true"  
                  parent="Ord"  
                  parent-key="CustomerID"  
                  child-key="CustomerID"  
                  child="Cust"/>  
  </xsd:appinfo>  
</xsd:annotation>  
  
<xsd:element name="Order" sql:relation="Ord">  
  <xsd:complexType>  
    <xsd:sequence>  
      <xsd:element ref="Customer" sql:relationship="OrdCust"/>  
    </xsd:sequence>  
    <xsd:attribute name="OrderID"   type="xsd:int"/>  
    <xsd:attribute name="CustomerID" type="xsd:string"/>  
  </xsd:complexType>  
</xsd:element>  
  
<xsd:element name="Customer" sql:relation="Cust">  
  <xsd:complexType>  
     <xsd:attribute name="CustomerID"  type="xsd:string"/>  
    <xsd:attribute name="CompanyName" type="xsd:string"/>  
  </xsd:complexType>  
</xsd:element>  
  
</xsd:schema>  

Skema XSD dalam contoh ini memiliki <elemen Pelanggan> dan <Pesanan> , dan menentukan hubungan induk-anak antara kedua elemen. Ini mengidentifikasi <Order> sebagai elemen induk dan <Pelanggan> sebagai elemen turunan.

Logika pemrosesan updategram menggunakan informasi tentang hubungan induk-anak untuk menentukan urutan di mana rekaman disisipkan ke dalam tabel. Dalam contoh ini, logika updategram pertama kali mencoba menyisipkan rekaman ke dalam tabel Ord (karena <Urutan> adalah induknya) lalu mencoba menyisipkan rekaman ke dalam tabel Kust (karena <Pelanggan> adalah anak). Namun, karena informasi kunci primer/kunci asing yang terkandung dalam skema tabel database, operasi penyisipan ini menyebabkan pelanggaran kunci asing dalam database dan penyisipan gagal.

Untuk menginstruksikan logika updategram untuk membalikkan hubungan induk-anak selama operasi pembaruan, anotasi terbalik ditentukan pada <elemen hubungan> . Akibatnya, rekaman ditambahkan terlebih dahulu dalam tabel Cust lalu dalam tabel Ord, dan operasi berhasil.

Updategram berikut menyisipkan pesanan (OrderID=2) dalam tabel Ord dan pelanggan (CustomerID='AAAAA') dalam tabel Kust dengan menggunakan skema XSD yang ditentukan:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync mapping-schema="SampleUpdateSchema.xml" >  
    <updg:before/>  
    <updg:after>  
      <Order OrderID="2" CustomerID="AAAAA" >  
        <Customer CustomerID="AAAAA" CompanyName="AAAAA Company" />  
      </Order>  
    </updg:after>  
  </updg:sync>  
</ROOT>  
Untuk menguji updategram
  1. Buat tabel ini di database tempdb :

    USE tempdb  
    CREATE TABLE Cust(CustomerID varchar(5) primary key,   
                      CompanyName varchar(20))  
    GO  
    CREATE TABLE Ord (OrderID int primary key,   
                      CustomerID varchar(5) references Cust(CustomerID))  
    GO  
    
  2. Salin kode skema di atas dan tempelkan ke dalam file teks. Simpan file sebagai SampleUpdateSchema.xml.

  3. Salin templat updategram di atas dan tempelkan ke dalam file teks. Simpan file sebagai SampleUpdategram.xml di direktori yang sama tempat Anda menyimpan SampleUpdateSchema.xml.

    Jalur direktori yang ditentukan untuk skema pemetaan (SampleUpdateSchema.xml) relatif terhadap direktori tempat templat disimpan. Jalur absolut juga dapat ditentukan, misalnya:

    mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"  
    
  4. Buat dan gunakan Skrip Pengujian SQLXML 4.0 (Sqlxml4test.vbs) untuk menjalankan templat.

    Untuk informasi selengkapnya, lihat Menggunakan ADO untuk Menjalankan Kueri SQLXML 4.0.

Lihat juga

Pertimbangan Keamanan Updategram (SQLXML 4.0)