Interpretación de anotaciones: sql:overflow-field
Se aplica a: SQL Server Azure SQL Database
En un esquema, puede identificar una columna como una columna de desbordamiento para que reciba todos los datos no consumidos del documento XML. Esta columna se especifica en el esquema mediante la anotación sql:overflow-field . Es posible tener varias columnas de desbordamiento.
Cada vez que un nodo XML (elemento o atributo) para el que hay una anotación sql:overflow-field definida entra en el ámbito, la columna de desbordamiento se activa y recibe datos sin enumerar. Cuando el nodo sale del ámbito, la columna de desbordamiento deja de estar activa y Carga masiva XML activa el campo de desbordamiento anterior (si existe).
A medida que almacena datos en la columna de desbordamiento, la carga masiva XML también almacena las etiquetas de apertura y cierre del elemento primario para el que se define sql:overflow-field .
Por ejemplo, el esquema siguiente describe los elementos Customers> y< CustOrder>.< Cada uno de estos elementos identifica una columna de desbordamiento:
<?xml version="1.0" ?>
<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="ROOT" sql:is-constant="1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Customers"
sql:relation="Cust"
sql:overflow-field="OverflowColumn">
<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"
sql:overflow-field="OverflowColumn">
<xsd:complexType>
<xsd:attribute name="OrderID"/>
<xsd:attribute name="CustomerID"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
En el esquema, el <elemento Customer> se asigna a la tabla Cust y el< elemento Order> se asigna a la tabla CustOrder.
<Los elementos Customer> y <Order> identifican una columna de desbordamiento. Por lo tanto, la carga masiva XML guarda todos los elementos secundarios sin enumerar y los atributos del <elemento Customer> en la columna de desbordamiento de la tabla Cust, y todos los elementos secundarios sin enumerar y atributos del< elemento Order> en la columna de desbordamiento de la tabla CustOrder.
Para probar un ejemplo funcional
Guarde el esquema que se proporciona en este ejemplo como SampleSchema.xml.
Cree estas tablas:
CREATE TABLE Cust ( CustomerID int PRIMARY KEY, CompanyName varchar(20) NOT NULL, City varchar(20) DEFAULT 'Seattle', OverflowColumn nvarchar(200)) GO CREATE TABLE CustOrder ( OrderID int PRIMARY KEY, CustomerID int FOREIGN KEY REFERENCES Cust(CustomerID), OverflowColumn nvarchar(200)) GO
Guarde los siguientes datos XML de ejemplo como SampleXMLData.xml:
<ROOT> <Customers> <CustomerID>1111</CustomerID> <CompanyName>Hanari Carnes</CompanyName> <City><![CDATA[NY]]> </City> <Junk>garbage in overflow</Junk> <Order OrderID="1" /> <Order OrderID="2" /> </Customers> <Customers> <CustomerID>1112</CustomerID> <CompanyName>Toms Spezialitten</CompanyName> <City><![CDATA[LA]]> </City> <xyz><address>111 Maple, Seattle</address></xyz> <Order OrderID="3" /> </Customers> <Customers> <CustomerID>1113</CustomerID> <CompanyName>Victuailles en stock</CompanyName> <Order OrderID="4" /> </Customers> </ROOT>
Para ejecutar carga masiva XML, guarde y ejecute este ejemplo de Microsoft Visual Basic Scripting Edition (VBScript) como Sample.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.Execute "c:\SampleSchema.xml", "c:\SampleXMLData.xml" set objBL=Nothing