Interpretação de anotação – sql:overflow-field
Aplica-se a: Banco de Dados SQL do Azure do SQL Server
Em um esquema, você pode identificar uma coluna de estouro para receber todos os dados não consumidos do documento XML. Essa coluna é especificada no esquema usando a anotação sql:overflow-field . É possível ter várias colunas de estouro.
Sempre que um nó XML (elemento ou atributo) para o qual há uma anotação sql:overflow-field definida entra no escopo, a coluna de estouro é ativada e recebe dados não consumidos. Quando o nó sair do escopo, a coluna de estouro não ficará mais ativa e o XML Bulk Load tornará o campo de estouro anterior (se houver) ativo.
Como armazena dados na coluna de estouro, o XML Bulk Load também armazena as tags de abertura e fechamento do elemento pai para o qual sql:overflow-field está definido.
Por exemplo, o esquema a seguir descreve os elementos Customers> e <CustOrder>.< Cada um destes elementos identifica uma coluna de estouro:
<?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>
No esquema, o <elemento Customer> é mapeado para a tabela Cust e o <elemento Order> é mapeado para a tabela CustOrder.
<Os elementos Customer> e <Order> identificam uma coluna de estouro. Assim, o XML Bulk Load salva todos os elementos e atributos filho não consumidos do <elemento Customer> na coluna de estouro da tabela Cust e todos os elementos e atributos filho não consumidos do< elemento Order> na coluna de estouro da tabela CustOrder.
Para testar um exemplo de funcionamento
Salve o esquema fornecido neste exemplo como SampleSchema.xml.
Crie estas tabelas:
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
Salve os dados XML de exemplo a seguir 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 executar o XML Bulk Load, salve e execute este exemplo do 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