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