Interpretation von Anmerkungen – sql:relationship und Schlüsselsortierregel
Gilt für:SQL Server
Azure SQL-Datenbank
Da das XML-Massenladen Datensätze generiert, wenn ihre Knoten in den Bereich eintreten, und diese Datensätze an Microsoft SQL Server sendet, wenn derEn Knoten den Bereich verlassen, müssen die Daten für den Datensatz innerhalb des Bereichs des Knotens vorhanden sein.
Betrachten Sie das folgende XSD-Schema, bei dem die 1:n-Beziehung zwischen <Customer> - und <Order-Elementen> (ein Kunde kann viele Bestellungen aufgeben) mithilfe des <sql:relationship-Elements> angegeben wird:
<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>
Wenn der <Customer-Elementknoten> in den Bereich eintritt, generiert XML-Massenladen einen Kundendatensatz. Dieser Datensatz bleibt so lange, bis das XML-Massenladen /Customer> liest<. Bei der Verarbeitung des <Order-Elementknotens> verwendet <das XML-Massenladen sql:relationship> , um den Wert der CustomerID-Fremdschlüsselspalte der CustOrder-Tabelle aus dem <übergeordneten Customer-Element> abzurufen, da das <Order-Element> nicht das CustomerID-Attribut angibt. Dies bedeutet, dass Sie beim Definieren des <Customer-Elements> das Attribut CustomerID im Schema angeben müssen, bevor Sie sql:relationship> angeben<. Wenn andernfalls ein <Order-Element> in den Bereich eintritt, generiert XML-Massenladen einen Datensatz für die CustOrder-Tabelle, und wenn das XML-Massenladen das <Endtag /Order> erreicht, wird der Datensatz an SQL Server ohne den Fremdschlüsselspaltenwert CustomerID gesendet.
Speichern Sie das in diesem Beispiel bereitgestellte Schema unter dem Dateinamen SampleSchema.xml.
So testen Sie ein funktionstüchtiges Beispiel
Erstellen Sie die folgenden 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)) GO
Speichern Sie die folgenden Beispieldaten unter dem Dateinamen 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>
Speichern Sie zum Ausführen des XML-Massenladens das folgende Beispiel für Microsoft Visual Basic Scripting Edition (VBScript) wie 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
Als Ergebnis fügt das XML-Massenladen einen NULL-Wert in die CustomerID-Fremdschlüsselspalte der CustOrder-Tabelle ein. Wenn Sie die XML-Beispieldaten so überarbeiten, dass das <untergeordnete CustomerID-Element> vor dem <untergeordneten Order-Element> angezeigt wird, erhalten Sie das erwartete Ergebnis: Xml Bulk Load fügt den angegebenen Fremdschlüsselwert in die Spalte ein.
Dies ist das entsprechende 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>
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Tickets als Feedbackmechanismus für Inhalte auslaufen lassen und es durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unter:Einreichen und Feedback anzeigen für