Recuperando dados não consumidos usando sql:overflow-field (SQLXML 4.0)
Quando forem inseridos registros em um banco de dados a partir de um documento XML usando a função OPENXML do Transact-SQL, todos os dados não consumidos no documento XML de origem poderão ser armazenados em uma coluna. Ao recuperar os dados de um banco de dados usando esquemas anotados, o atributo sql:overflow-field pode ser especificado para identificar a coluna da tabela na qual os dados de estouro estão armazenados. O atributo sql:overflow-field pode ser especificado em <element>.
Em seguida, esses dados são recuperados destas formas:
Os atributos armazenados na coluna de estouro são adicionados ao elemento que contém a anotação sql:overflow-field.
Os elementos filhos e seus descendentes, armazenados na coluna de estouro do banco de dados, são adicionados como elementos filhos, após o conteúdo que é especificado explicitamente no esquema. (Nenhuma ordem é preservada.)
Exemplos
Para criar exemplos de funcionamento usando os exemplos a seguir, é necessário atender a determinados requisitos. Para obter mais informações, consulte Requisitos para executar exemplos do SQLXML.
A. Especificando sql:overflow-field para um elemento
Este exemplo presume que o seguinte script foi executado de forma que existe uma tabela chamada Customers2 no banco de dados tempdb:
USE tempdb
CREATE TABLE Customers2 (
CustomerID VARCHAR(10),
ContactName VARCHAR(30),
AddressOverflow NVARCHAR(500))
GO
INSERT INTO Customers2 VALUES (
'ALFKI',
'Joe',
'<Address>
<Address1>Maple St.</Address1>
<Address2>Apt. E105</Address2>
<City>Seattle</City>
<State>WA</State>
<Zip>98147</Zip>
</Address>')
GO
Além disso, você deve criar um diretório virtual para o banco de dados tempdb e um nome virtual de modelo do tipo template chamado "template".
No exemplo a seguir, o esquema de mapeamento recupera os dados não consumidos que são armazenados na coluna AddressOverflow tabela Customers2:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Customers2" sql:overflow-field="AddressOverflow" >
<xsd:complexType>
<xsd:attribute name="CustomerID" type="xsd:integer"/>
<xsd:attribute name="ContactName" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
Para testar uma consulta XPath de exemplo com relação ao esquema
Copie o código de esquema acima e cole-o em um arquivo de texto. Salve o arquivo como Overflow.xml.
Copie o modelo a seguir e cole-o em um arquivo de texto. Salve o arquivo como OverflowT.xml no mesmo diretório em que você salvou Overflow.xml. A consulta no modelo seleciona os registros na tabela Customer2.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="Overflow.xml"> /Customers2 </sql:xpath-query> </ROOT>
O caminho de diretório especificado para o esquema de mapeamento (Overflow.xml) é relativo ao diretório no qual o modelo foi salvo. Também é possível especificar um caminho absoluto, por exemplo:
mapping-schema="C:\SqlXmlTest\Overflow.xml"
Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.
Para obter mais informações, consulte Usando o ADO para executar consultas do SQLXML 4.0.
Este é o conjunto de resultados:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customers2 CustomerID="ALFKI" ContactName="Joe">
<Address1>Maple St.</Address1>
<Address2>Apt. E105</Address2>
<City>Seattle</City>
<State>WA</State>
<Zip>98147</Zip>
</Customers2>
</ROOT>