Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Omdat XML Bulk Load records genereert zodra hun nodes in scope komen en die records naar Microsoft SQL Server stuurt als hun nodes de scope verlaat, moeten de gegevens voor het record binnen de scope van de node aanwezig zijn.
Beschouw het volgende XSD-schema, waarin de één-op-veel-relatie tussen <Klant> - en <Order-elementen> (één klant kan veel bestellingen plaatsen) wordt gespecificeerd door gebruik te maken van het <sql:relationship-element> :
<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>
Wanneer de <Customer> Element-node in scope komt, genereert XML Bulk Load een klantrecord. Dit record blijft staan totdat XML Bulk Load /Customer> leest<. Bij het verwerken van de <Order-elementknoop> gebruikt <XML Bulk Load sql:relationship> om de waarde van de CustomerID-vreemde sleutelkolom van de CustOrder-tabel uit het <Customer-ouderelement> te verkrijgen, omdat het <Order-element> het CustomerID-attribuut niet specificeert. Dit betekent dat je bij het definiëren van het <Customer-element> eerst het CustomerID-attribuut in het schema moet specificeren voordat je sql:relationship> specificeert<. Anders, wanneer een <Order-element> in scope komt, genereert XML Bulk Load een record voor de CustOrder-tabel, en wanneer de XML Bulk Load de </Order> end-tag bereikt, wordt het record naar SQL Server gestuurd zonder de kolom CustomerID vreemde sleutel.
Sla het schema dat in dit voorbeeld wordt gegeven op als SampleSchema.xml.
Om een werkmonster te testen
Maak deze tabellen:
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)) GOSla de volgende voorbeeldgegevens op als 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>Om XML Bulk Load uit te voeren, sla en voer je het volgende voorbeeld van Microsoft Visual Basic Scripting Edition (VBScript) uit als 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=NothingHet resultaat is dat XML Bulk Load een NULL-waarde invoegt in de CustomerID-kolom vreemde sleutel van de CustOrder-tabel. Als je de XML-voorbeeldgegevens zo aanpast dat het <CustomerID-kindelement> vóór het <Order-kindelement> verschijnt, krijg je het verwachte resultaat: XML Bulk Load voegt de gespecificeerde vreemde sleutelwaarde in de kolom in.
Dit is het equivalente 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>