Aracılığıyla paylaş


Bir Updategram'da Açıklamalı Eşleme Şeması Belirtmek (SQLXML 4.0)

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

Bu konu, updategramda belirtilen eşleme şemasının (XSD veya XDR) güncellemeleri işlemek için nasıl kullanıldığını açıklar. Updategram'da, Microsoft SQL Server'daki öğeler ve öznitelikler için açıklamalı bir eşleme şemasının adını verebilirsiniz. Bir updategram'da bir eşleme şeması belirtildiğinde, updategram'da belirtilen eleman ve öznitelik adları, eşleme şemasındaki öğeler ve özniteliklerle eşlenmelidir.

Bir eşleme şeması belirtmek için, senkronizasyon> öğesinin mapping-schema özniteliğini< kullanırsınız. Aşağıdaki örnekler iki updategram göstermektedir: biri basit bir eşleme şeması kullanan, diğeri ise daha karmaşık bir şema kullanan.

Uyarı

Bu dokümantasyon, SQL Server'da şablonlar ve eşleme şema desteğine aşina olduğunuzu varsayıyor. Daha fazla bilgi için bkz. Açıklamalı XSD Şemalarına Giriş (SQLXML 4.0). XDR kullanan eski uygulamalar için bkz. Annotated XDR Schemas (SQLXML 4.0'da kullanımdan kaldırılmıştır).

Veri Tipleriyle Başa Çıkmak

Şema resim, ikili veya varbinerSQL Server veri tipini ( sql:datatype kullanılarak) belirtiyorsa ve XML veri tipi belirtmiyorsa, updategram XML veri tipinin ikili taban 64 olduğunu varsayar. Veriniz bin.base tipindeyse, bu türü açıkça belirtmeniz gerekir (dt:type=bin.base veya type="xsd:hexBinary").

Şema dateTime, date veya time XSD veri tipini belirtiyorsa, sql:datatype="dateTime" kullanarak ilgili SQL Server veri tipini de belirtmelisiniz.

SQL Server para tipi parametrelerini işlerken eşleme şemasında uygun düğümde sql:datatype="money" açıkça belirtmeniz gerekir.

Örnekler

Aşağıdaki örnekleri kullanarak çalışma örnekleri oluşturmak için, SQLXML Örneklerini Çalıştırma Gereksinimleri bölümünde belirtilen gereksinimleri karşılamanız gerekir.

A. Basit bir eşleme şemasıyla bir updategram oluşturmak

Aşağıdaki XSD şeması (SampleSchema.xml), Müşteri> öğesini Sales.Customer tablosuna eşleyen< bir eşleme şemasıdır:

<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>  

Aşağıdaki updategram, Sales.Customer tablosuna bir kayıt ekler ve bu veriyi doğru şekilde tabloya eşlemek için önceki eşleme şemasına dayanır. Updategram'ın şemada tanımlanan aynı öğe adı olan< Customer'ı> kullandığına dikkat edin. Bu zorunludur çünkü updategram belirli bir şemayı belirtir.

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

  2. Aşağıdaki updategram şablonunu kopyalayıp metin dosyasına yapıştırın. Dosyayı aynı dizinde SampleUpdategram.xml olarak kaydet 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>  
    

    Eşleme şeması (SampleUpdateSchema.xml) için belirtilen dizin yolu, şablonun kaydedildiği dizine görecelidir. Mutlak bir yol da belirtilebilir, örneğin:

    mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"  
    
  3. Şablonu ç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.

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="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. Eşleme şemasında belirtilen ebeveyn-çocuk ilişkisi kullanılarak kayıt eklemek

Şema öğeleri ilişkilendirilebilir. sql:ilişki> öğesi,< şema öğeleri arasındaki ebeveyn-çocuk ilişkisini belirtir. Bu bilgi, birincil anahtar/yabancı anahtar ilişkisi olan ilgili tabloları güncellemek için kullanılır.

Aşağıdaki eşleme şeması (SampleSchema.xml) iki elemandan oluşur: <Düzen> ve <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>  

Aşağıdaki güncelleme gramı, bu XSD şemasını kullanarak 43860 numaralı emir için yeni bir emir detay kaydı (<after blokta bir OD> elemanı) ekler.<> Mapping-schema özniteliği, updategram'da eşleme şemasını belirtmek için kullanılır.

<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>  
Güncelleme gramını test etmek için
  1. Yukarıdaki şema kodunu kopyalayıp metin dosyasına yapıştırın. Dosyayı SampleUpdateSchema.xmlolarak kaydet.

  2. Yukarıdaki updategram şablonunu kopyalayıp metin dosyasına yapıştırın. Dosyayı aynı dizinde SampleUpdategram.xml olarak kaydet SampleUpdateSchema.xml.

    Eşleme şeması (SampleUpdateSchema.xml) için belirtilen dizin yolu, şablonun kaydedildiği dizine görecelidir. Mutlak bir yol da belirtilebilir, örneğin:

    mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"  
    
  3. Şablonu ç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.

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="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. XSD şemasında belirtilen ebeveyn-çocuk ilişkisi ve ters açıklama kullanılarak kayıt eklemek

Bu örnek, updategram mantığının güncellemeleri işlemek için XSD'de belirtilen ebeveyn-çocuk ilişkisini nasıl kullandığını ve ters annotasyonun nasıl kullanıldığını göstermektedir. Ters açıklama hakkında daha fazla bilgi için, sql:ilişki üzerinde sql:inverse Özniteliğinin Belirtilmesi (SQLXML 4.0) bölümüne bakınız.

Bu örnek, tempdb veritabanında aşağıdaki tabloların bulunduğunu varsayar:

  • Cust (CustomerID, CompanyName), burada CustomerID birincil anahtardır

  • Ord (OrderID, CustomerID), burada CustomerID tablodaki birincil anahtara Cust atıfta CustomerID bulunan yabancı anahtardır.

Updategram, kayıtları Cust ve Ord tablolarına eklemek için aşağıdaki XSD şemasını kullanır:

<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>  

Bu örnekteki XSD şeması Müşteri> ve Sipariş öğelerine sahiptir< ve iki eleman arasında ebeveyn-çocuk ilişkisi belirler.>< Siparişi ana eleman olarak, Müşteriyi> ise ana eleman olarak< tanımlar<.>

Updategram işleme mantığı, ebeveyn-çocuk ilişkisi bilgilerini kullanarak kayıtların tablolara hangi sırayla ekleneceğini belirler. Bu örnekte, updategram mantığı önce bir kayıt eklemeye çalışır (<çünkü Order> ebeveyndir) ve ardından Cust tablosuna bir kayıt eklemeye çalışır (çünkü< Müşteri> çocuktur). Ancak, veritabanı tablo şemasında bulunan birincil anahtar/yabancı anahtar bilgisi nedeniyle, bu ekleme işlemi veritabanında yabancı anahtar ihlaline yol açar ve ekleme başarısız olur.

Güncelleme işlemi sırasında parent-child ilişkisini tersine çevirmesini updategram mantığına talimat vermek için, ilişki> öğesinde<ters açıklama belirtilir. Sonuç olarak, kayıtlar önce Cust tablosuna, sonra Ord tablosuna eklenir ve işlem başarılı olur.

Aşağıdaki updategram, belirtilen XSD şeması kullanılarak Ord tablosuna bir sipariş (OrderID=2) ve Cust tablosuna bir müşteri (CustomerID='AAAAA') ekler:

<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>  
Güncelleme gramını test etmek için
  1. tempdb veritabanında şu tabloları oluşturun:

    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. Yukarıdaki şema kodunu kopyalayıp metin dosyasına yapıştırın. Dosyayı SampleUpdateSchema.xmlolarak kaydet.

  3. Yukarıdaki updategram şablonunu kopyalayıp metin dosyasına yapıştırın. Dosyayı aynı dizinde SampleUpdategram.xml olarak kaydet SampleUpdateSchema.xml.

    Eşleme şeması (SampleUpdateSchema.xml) için belirtilen dizin yolu, şablonun kaydedildiği dizine görecelidir. Mutlak bir yol da belirtilebilir, örneğin:

    mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"  
    
  4. Şablonu ç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.

Ayrıca Bkz.

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