Aracılığıyla paylaş


Açıklama eklenmiş bir eşleme şeması bir Updategram (sqlxml 4.0) belirtme

Bu konuda bir updategram içinde belirtilen eşleme şeması (xsd veya xdr) güncelleştirmeleri işlemek için nasıl kullanıldığı açıklanmaktadır. Tabloları ve sütunları öğeler ve öznitelikler updategram eşleme olarak kullanmak için bir açıklama eklenmiş bir eşleme şeması adı size bir updategram, Microsoft   SQL Server. Bir eşleme şeması bir updategram belirtildiğinde updategram içinde belirtilen öğe ve öznitelik adları öğeler ve öznitelikler eşleme şemada eşlenmelidir.

Eşleme şema belirtmek için mapping-schemaözniteliği <sync>öğesi. Aşağıdaki örnekler, iki updategrams gösterir: bir basit eşleme şema kullanan ve bir daha karmaşık bir şema kullanan.

[!NOT]

Bu belgeler, Şablonlar ve eşleme şema desteği bildiğinizi varsayar SQL Server. Daha fazla bilgi için, bkz. Açıklama eklenmiş xsd şemaları (sqlxml 4.0) Giriº. xdr kullanan eski uygulamalar için Açıklama eklenmiş xdr şemalarını (sqlxml 4.0 onaylanmaz).

Veri türleri ile ilgili

Şema belirtir, image, binary, ya varbinary SQL Serververi türü (kullanarak sql:datatype) ve bir xml veri türü belirtmezse updategram xml veri türü olduğunu varsayar binary base 64. Verileriniz bin.basetürü, açıkça tipini belirtmeniz gerekir ( dt:type=bin.base ya type="xsd:hexBinary").

Şema belirtir, dateTime, date, ya timexsd veri türü, ilgili belirtmeniz de gerekir SQL Serververi türü kullanarak sql:datatype="dateTime".

Parametreleri işlenirken SQL Server  moneytürü, açıkça belirtmeniz gerekir sql:datatype="money"eşleme şemada uygun düğümdeki.

Örnekler

Aşağıdaki örnekler kullanarak çalışma örnekleri oluşturmak için belirtilen gereksinimleri karşılamalıdır sqlxml örnekleri çalıştırma gereksinimleri.

A.İle bir basit eşleme şeması bir updategram oluşturma

Aşağıdaki xsd şeması (SampleSchema.xml) eşlendiği eşleme şema olduğunu <Müşteri > Sales.Customer tablosuna öğe:

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

<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 verileri tabloya düzgün eşlemek için önceki eşleme şema dayanır. Updategram aynı öğe adını kullandığını fark <Müşteri>, şemada tanımlanan. The updategram belirli bir şema belirtir, bu özellik gereklidir.

Updategram sınamak için

  1. Yukarıdaki şema kodu kopyalayın ve bir metin dosyasına yapıştırın. Dosyayı SampleUpdateSchema.xml kaydedin.

  2. Aşağıdaki updategram şablonu kopyalayıp bir metin dosyasına yapıştırın. SampleUpdategram.xml SampleUpdateSchema.xml kaydettiğiniz aynı dizine kaydedin.

    <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>
    
    <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 şema (SampleUpdateSchema.xml) için belirtilen dizin yolu göreli olarak şablonun kaydedildiği dizindir. Mutlak bir yol da, örneğin belirtilebilir:

    mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"
    
    mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"
    
  3. Oluşturun ve sqlxml 4.0 sınama komut dosyası (Sqlxml4test.vbs) şablonu yürütmek için kullanın.

    Daha fazla bilgi için, bkz. ado sqlxml yürütme kullanarak 4.0 sorgular.

Eşdeğer xdr şeması budur:

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

<?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 üst-alt ilişkisi kullanarak bir kayıt ekleme

Şema öğeleri ilgili olabilir. <SQL: relationship > öğe belirler şema öğeleri üst-alt ilişkisi. Bu bilgiler, İlköğretim-anahtar/yabancı anahtar ilişkisi ilgili tabloları güncelleştirmek için kullanılır.

Aşağıdaki eşleme şeması (SampleSchema.xml) oluşan iki unsurları, <Order > 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>

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

Yeni bir sipariş ayrıntı kaydı eklemek için bu xsd şeması aşağıdaki updategram kullanır (bir <od > öğesinde <after> Blok) için sipariş 43860. mapping-schemaÖzniteliği updategram eşleme şema 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>

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

Updategram sınamak için

  1. Yukarıdaki şema kodu kopyalayın ve bir metin dosyasına yapıştırın. Dosyayı SampleUpdateSchema.xml kaydedin.

  2. Yukarıdaki updategram şablonu kopyalayıp bir metin dosyasına yapıştırın. SampleUpdategram.xml SampleUpdateSchema.xml kaydettiğiniz aynı dizine kaydedin.

    Eşleme şema (SampleUpdateSchema.xml) için belirtilen dizin yolu göreli olarak şablonun kaydedildiği dizindir. Mutlak bir yol da, örneğin belirtilebilir:

    mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"
    
    mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"
    
  3. Oluşturun ve sqlxml 4.0 sınama komut dosyası (Sqlxml4test.vbs) şablonu yürütmek için kullanın.

    Daha fazla bilgi için, bkz. ado sqlxml yürütme kullanarak 4.0 sorgular.

Eşdeğer xdr şeması budur:

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

<?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 üst-alt ilişkisi ve ters açıklama kullanarak bir kayıt ekleme

Bu örnekte xsd belirtilen üst-alt ilişkisi güncelleştirmeleri işlemek için updategram mantığı tarafından nasıl kullanıldığı gösterilmektedir ve nasıl inverseeklenti kullanılır. Hakkında daha fazla bilgi için inversebkz: Açıklama, Öznitelik SQL: inverse üzerinde SQL: Relationship (sqlxml 4.0) belirtme.

Bu örnek, aşağıdaki tablolarda bulunan varsayılmaktadır tempdb veritabanı:

  • Cust (CustomerID, CompanyName), nereye CustomerIDbirincil anahtar

  • Ord (OrderID, CustomerID), nereye CustomerIDbaşvuran yabancı anahtar olan CustomerIDbirincil anahtar Custtablosu.

The updategram, müşteri ve sipariş tablolarına kayıtları eklemek için aşağıdaki xsd şeması 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>

<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 örnekte xsd şeması vardır <Müşteri > ve <Order > öğeleri ve bu iki unsur arasında bir üst-alt ilişkisi belirler. Belirlediği <Order > üst öğe olarak ve <Müşteri > alt öğe olarak.

Mantığını işleme updategram içinde tablolarına kayıtları eklenen sırasını belirlemek için üst-alt ilişkisi hakkındaki bilgileri kullanır. Bu örnekte updategram mantığı ilk Ord tabloya kayıt eklemek için çalışır (çünkü <Order > üst) ve sonra müşteri tablosuna bir kayıt ekleme girişiminde (çünkü <Müşteri > çocuk). Ancak, veritabanı tablo şema birincil anahtara yabancı anahtar bilgiler, nedeniyle bu ekleme işlemini veritabanına yabancı anahtar ihlali neden olur ve Ekle başarısız.

Updategram mantığı güncelleştirme işlemi sırasında üst-alt ilişkisi tersine talimat inverseek açıklama üzerinde belirtilen <ilişki > öğesi. Sonuç olarak, kayıtları ilk müşteri tablosunda ve sonra sipariş tablosuna eklenir ve işlem başarılı.

Sipariş aşağıdaki updategram ekler (SiparişNo = 2) Ord tablo ve bir müşteri (MüşteriNo 'aaaaa' =) belirtilen xsd şeması kullanarak Müşteri tablosunda:

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

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

Updategram sınamak için

  1. Bu tablolarda oluşturmak tempdb veritabanı:

    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
    
    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 kodu kopyalayın ve bir metin dosyasına yapıştırın. Dosyayı SampleUpdateSchema.xml kaydedin.

  3. Yukarıdaki updategram şablonu kopyalayıp bir metin dosyasına yapıştırın. SampleUpdategram.xml SampleUpdateSchema.xml kaydettiğiniz aynı dizine kaydedin.

    Eşleme şema (SampleUpdateSchema.xml) için belirtilen dizin yolu göreli olarak şablonun kaydedildiği dizindir. Mutlak bir yol da, örneğin belirtilebilir:

    mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"
    
    mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"
    
  4. Oluşturun ve sqlxml 4.0 sınama komut dosyası (Sqlxml4test.vbs) şablonu yürütmek için kullanın.

    Daha fazla bilgi için, bkz. ado sqlxml yürütme kullanarak 4.0 sorgular.

Ayrıca bkz.

Başvuru

Updategram Güvenlik etkenleri (sqlxml 4.0)