Aracılığıyla paylaş


SQL:Relationship ve sıralama anahtar kural (SQLXML 4.0)

XML toplu yükleme düğümlerini kapsam girerken, kayıtları oluşturur ve kayıtları Microsoft'a gönderir. SQL Server Kapsam düğümlerini çıkmak gibi kayıt için veri düğüm kapsamında bulunması gerekir. 

Aşağıdaki XSD şeması, bunlar dikkate arasında bir-çok ilişki <Müşteri> ve <Sipariş> (birçok siparişleri bir müşteri yerleştirebilirsiniz) belirtilen öğelerin kullanarak <sql:relationship> Öğe:

<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="CustCustOrder"
          parent="Cust"
          parent-key="CustomerID"
          child="CustOrder"
          child-key="CustomerID" />
  </xsd:appinfo>
</xsd:annotation>

  <xsd:element name="Customers" sql:relation="Cust" >
   <xsd:complexType>
     <xsd:sequence>
       <xsd:element name="CustomerID"  type="xsd:integer" />
       <xsd:element name="CompanyName" type="xsd:string" />
       <xsd:element name="City"        type="xsd:string" />
       <xsd:element name="Order" 
                          sql:relation="CustOrder"
                          sql:relationship="CustCustOrder" >
         <xsd:complexType>
          <xsd:attribute name="OrderID" type="xsd:integer" />
         </xsd:complexType>
       </xsd:element>
     </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Olarak <Müşteri> öğe düğümü kapsam girer, XML toplu yükleme bir müşteri kaydı oluşturur. XML toplu yükleme okur kadar bu kaydı kalır. </ Müşteri>. In processing the <Order> element node, XML Bulk Load uses <sql:relationship> to obtain the value of the CustomerID foreign key column of the CustOrder table from the <Customer> parent element, because the <Order> element does not specify the CustomerID attribute.Bunun anlamı, söz konusu tanımlama <Müşteri> öğe belirtmelisiniz MüşteriNo Şemadaki belirttiğiniz önce özniteliği<sql:relationship>. Aksi durumda, zaman bir <Sipariş> kapsam içinde öğeyi girer, XML toplu yükleme CustOrder tablosu için bir kayıt oluşturur ve XML toplu, yük eriştiği </ Siparişi> Etiket, son kayda göndermeden SQL Server MüşteriNo yabancı anahtar olmadan sütun değeri.

Bir çalışan örneği sınamak için

  1. Bu tablo oluşturun:

    CREATE TABLE Cust (
                  CustomerID     int          PRIMARY KEY,
               CompanyName    varchar(20)  NOT NULL,
                  City           varchar(20)  DEFAULT 'Seattle')
    GO
    CREATE TABLE CustOrder (
                  OrderID        varchar(10) PRIMARY KEY,
               CustomerID     int         FOREIGN KEY REFERENCES                                          Cust(CustomerID))
    GO
    
  2. Aşağıdaki örnek verileri SampleXMLData.xml kaydedin:

    <ROOT>  
      <Customers>
        <CompanyName>Hanari Carnes</CompanyName>
        <City>NY</City>
        <Order OrderID="1" />
        <Order OrderID="2" />
        <CustomerID>1111</CustomerID>
      </Customers>
      <Customers>
        <CompanyName>Toms Spezialitten</CompanyName>
         <City>LA</City>  
        <Order OrderID="3" />
        <CustomerID>1112</CustomerID>
      </Customers>
      <Customers>
        <CompanyName>Victuailles en stock</CompanyName>
        <Order OrderID="4" />
        <CustomerID>1113</CustomerID>
      </Customers>
    </ROOT>
    
  3. XML toplu yükleme çalıştırmak için , kaydetmek ve aşağıdaki yürütmek Microsoft Visual Basic komut dosyası kullanan Edition (VBScript) örnek olarak MySample.vbs:

    set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")
    objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI"
    objBL.ErrorLogFile = "c:\error.log"
    objBL.CheckConstraints = True
    objBL.Transaction=True
    objBL.Execute "c:\SampleSchema.xml", "c:\SampleXMLData.xml"
    set objBL=Nothing
    

    XML toplu yükleme MüşteriNo yabancı anahtar sütun CustOrder tablo içinde bir NULL değeri ekler sonucudur.Örnek XML verileri düzenlerseniz, <MüşteriNo> önce alt öğe görünür <Sipariş> alt öğe, beklenen sonucu alırsınız: XML toplu yükleme, sütuna belirtilen yabancı anahtar değerini ekler.

Bu, eşdeğer XDR şeması oluşur:

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data" 
        xmlns:dt="urn:schemas-microsoft-com:xml:datatypes"  
        xmlns:sql="urn:schemas-microsoft-com:xml-sql" > 
   <ElementType name="CustomerID"  />
   <ElementType name="CompanyName" />
   <ElementType name="City"        />

   <ElementType name="root" sql:is-constant="1">
      <element type="Customers" />
   </ElementType>

   <ElementType name="Customers" sql:relation="Cust" >
      <element type="CustomerID" sql:field="CustomerID" />
      <element type="CompanyName" sql:field="CompanyName" />
      <element type="City" sql:field="City" />
      <element type="Order" >
                 <sql:relationship
                        key-relation    ="Cust"
                        key             ="CustomerID"
                        foreign-key     ="CustomerID"
                        foreign-relation="CustOrder" />
      </element>
   </ElementType>
    <ElementType name="Order" sql:relation="CustOrder" >
      <AttributeType name="OrderID" />
      <AttributeType name="CustomerID" />
      <attribute type="OrderID" />
      <attribute type="CustomerID" />
    </ElementType>
</Schema>