Partilhar via


Recuperando dados não consumidos usando sql:overflow-field (Esquema XDR)

Observação importanteImportante

Este tópico está incluso como referência para aplicativos herdados. Não será feito nenhum trabalho de desenvolvimento futuro nesse recurso. Evite usá-lo em novos trabalhos de desenvolvimento. Em vez disso, use esquemas XSD anotados para criar exibições XML. Para obter mais informações, consulte Introdução a esquemas XSD anotados (SQLXML 4.0). Você pode converter esquemas XDR anotados existentes em esquemas XSD. Para obter mais informações, consulte Convertendo esquemas XDR anotados a esquemas XSD equivalentes (SQLXML 4.0).

Quando forem inseridos registros no banco de dados a partir de um documento XML usando OPENXML, todos os dados não consumidos no documento XML de origem poderão ser armazenados em uma coluna. Ao recuperar os dados do banco de dados usando esquemas anotados, o atributo sql:overflow-field pode ser especificado para identificar a coluna da tabela na qual os dados excedentes estão armazenados.

Em seguida, esses dados são recuperados destas formas:

  • Os atributos armazenados na coluna de dados excedentes são adicionados ao elemento que contém a anotação sql:overflow-field.

  • Os subelementos, e seus descendentes, armazenados na coluna de dados excedentes do banco de dados são adicionados como subelementos, após o conteúdo que é especificado explicitamente no esquema (não é preservada nenhuma ordem).

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. Especifique sql:overflow-field para um <ElementType> no Esquema XDR

O exemplo assume que esta tabela existe 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

Neste exemplo, o esquema de mapeamento recupera os dados não consumidos armazenados na coluna AddressOverflow da tabela Customers2. O atributo sql:overflow-field é especificado em <ElementType>.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <ElementType name="Customers2" sql:overflow-field="AddressOverflow" >
    <AttributeType name="CustomerID" />
    <AttributeType name="ContactName" />

    <attribute type="CustomerID" />
    <attribute type="ContactName"/>
  </ElementType>
</Schema>

Para testar uma consulta XPath de exemplo no esquema

  1. Copie o código de esquema acima e cole-o em um arquivo de texto. Salve o arquivo como OverflowXdr.xml.

  2. Copie o modelo a seguir e cole-o em um arquivo de texto. Salve o arquivo como OverflowXdrT.xml no mesmo diretório em que você salvou OverflowXdr.xml.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="OverflowXdr.xml">
        Customers2
      </sql:xpath-query>
    </ROOT>
    

    O caminho de diretório especificado para o esquema de mapeamento (OverflowXdr.xml) é relativo ao diretório onde o modelo está salvo. Também é possível especificar um caminho absoluto, por exemplo:

    mapping-schema="C:\MyDir\OverflowXdr.xml"
    
  3. 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.

A seguir está 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>

Consulte também

Referência