Partilhar via


Recuperação de Dados Não Consumidos Usando o campo sql:overflow (SQLXML 4.0)

Aplica-se a:SQL ServerBanco de Dados SQL do Azure

Quando os registos são inseridos numa base de dados a partir de um documento XML usando a função Transact-SQL OPENXML, todos os dados não consumidos do documento XML de origem podem ser armazenados numa coluna. Quando recupera dados de uma base de dados usando esquemas anotados, pode especificar o atributo sql:overflow-field para identificar a coluna na tabela onde os dados de overflow estão armazenados. O atributo sql:overflow-field pode ser especificado no <elemento>.

Estes dados são depois recuperados da seguinte forma:

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

  • Os elementos filhos e os seus descendentes, armazenados na coluna de overflow na base de dados, são adicionados como elementos filhos após o conteúdo explicitamente especificado no esquema. (Nenhuma ordem é preservada.)

Examples

Para criar exemplos funcionais usando os seguintes exemplos, deve cumprir certos requisitos. Para mais informações, consulte Requisitos para Executar Exemplos de SQLXML.

A. Especificação do campo sql:overflow para um elemento

Este exemplo assume que o seguinte script foi executado para que exista uma tabela chamada Customers2 na base 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, deve criar um diretório virtual para a base de dados tempdb — e um nome virtual modelo do tipo modelo chamado "template".

No exemplo seguinte, o esquema de mapeamento recupera os dados não consumidos que estão armazenados na coluna AddressOverflow da 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 contra o esquema
  1. Copie o código do esquema acima e cole num ficheiro de texto. Guarde o ficheiro como Overflow.xml.

  2. Copie o modelo seguinte e cole-o num ficheiro de texto. Guarda o ficheiro como OverflowT.xml no mesmo diretório onde guardaste Overflow.xml. A consulta no modelo seleciona os registos na tabela Customers2.

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

    O caminho do diretório especificado para o esquema de mapeamento (Overflow.xml) é relativo ao diretório onde o modelo é guardado. Um caminho absoluto também pode ser especificado, por exemplo:

    mapping-schema="C:\SqlXmlTest\Overflow.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 SQLXML 4.0.

Aqui 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>