Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Eftersom XML Bulk Load genererar poster när deras noder går in i scope och skickar dessa poster till Microsoft SQL Server när deras noder lämnar scope, måste datan för posten finnas inom nodens scope.
Betrakta följande XSD-schema, där en-till-många-relationen mellan <kund-> och <orderelement> (en kund kan lägga många beställningar) specificeras genom att använda elementet< sql:relationship>:
<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>
När <kundens> elementnod går in i scope genererar XML Bulk Load en kundpost. Denna post stannar tills XML Bulk Load läser </Customer>. Vid bearbetning av <Order-element-noden> använder <XML Bulk Load sql:relationship> för att erhålla värdet i kolumnen CustomerID främmande nyckel i CustOrder-tabellen från <Customer-moderelementet>, eftersom Order-elementet <> inte specificerar attributet CustomerID. Detta innebär att när du definierar <Customer-elementet> måste du ange attributet CustomerID i schemat innan du anger <sql:relationship>. Annars, när ett <Order-element> går in i scope, genererar XML Bulk Load en post för CustOrder-tabellen, och när XML Bulk Load når /Order-sluttaggen<> skickas posten till SQL Server utan kolumnen CustomerID främmande nyckel.
Spara schemat som ges i detta exempel som SampleSchema.xml.
För att testa ett fungerande prov
Skapa följande tabeller:
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)) GOSpara följande exempeldata som SampleXMLData.xml:
<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>För att köra XML Bulk Load, spara och kör följande Microsoft Visual Basic Scripting Edition (VBScript)-exempel som 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=NothingResultatet är att XML Bulk Load infogar ett NULL-värde i kolumnen CustomerID främmande nyckel i CustOrder-tabellen. Om du reviderar XML-exempeldata så att CustomerID-barnelementet<> visas före <Order-barnelementet>, får du det förväntade resultatet: XML Bulk Load infogar det angivna främmande nyckelvärdet i kolumnen.
Det här är motsvarande XDR-schema:
<?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>