Hämta okonsumerad data med sql:overflow-fältet (SQLXML 4.0)

gäller för:SQL ServerAzure SQL Database

När poster infogas i en databas från ett XML-dokument med hjälp av Transact-SQL OPENXML-funktionen kan all oanvänd data från källdokumentet i XML lagras i en kolumn. När du hämtar data från en databas med hjälp av annoterade scheman kan du ange attributet sql:overflow-field för att identifiera kolumnen i tabellen där överflödesdata lagras. attributet sql:overflow-field kan specificeras på <element>.

Denna data hämtas sedan på följande sätt:

  • Attribut som lagras i överflödeskolumnen läggs till i elementet som innehåller sql:overflow-fältannoteringen .

  • Barnelementen och deras efterföljare, lagrade i överflödeskolumnen i databasen, läggs till som barnelement enligt det innehåll som uttryckligen anges i schemat. (Ingen ordning bevaras.)

Examples

För att skapa arbetsprover med hjälp av följande exempel måste du uppfylla vissa krav. För mer information, se Krav för att köra SQLXML-exempel.

A. Specificering av sql:overflow-fält för ett element

Detta exempel antar att följande skript har körts så att en tabell med namnet Customers2 finns i tempdb-databasen:

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  

Dessutom måste du skapa en virtuell katalog för tempdb-databasen – och en mall med virtuellt namn av malltyp som heter "template".

I följande exempel hämtar mappningsschemat den oanvända data som lagras i kolumnen AddressOverflow i Customers2-tabellen:

<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>  
För att testa en exempel-XPath-fråga mot schemat
  1. Kopiera schemakoden ovan och klistra in den i en textfil. Spara filen som Overflow.xml.

  2. Kopiera följande mall och klistra in den i en textfil. Spara filen som OverflowT.xml i samma katalog där du sparade Overflow.xml. Frågan i mallen väljer posterna i Customers2-tabellen.

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

    Den katalogväg som anges för mappningsschemat (Overflow.xml) är relativ till katalogen där mallen sparas. En absolut väg kan också specificeras, till exempel:

    mapping-schema="C:\SqlXmlTest\Overflow.xml"  
    
  3. Skapa och använd SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra mallen.

    Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.

Här är resultatuppsättningen:

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