Delen via


Ongebruikte data ophalen met het sql:overflow-veld (SQLXML 4.0)

Van toepassing op:SQL ServerAzure SQL Database

Wanneer records vanuit een XML-document in een database worden ingevoegd met behulp van de Transact-SQL OPENXML-functie, kunnen alle niet-gebruikte gegevens uit het bron-XML-document in een kolom worden opgeslagen. Wanneer je data uit een database ophaalt met behulp van geannoteerde schema's, kun je het attribuut sql:overflow-field specificeren om de kolom in de tabel te identificeren waarin de overflowgegevens zijn opgeslagen. Het sql:overflow-field attribuut kan worden gespecificeerd op element<>.

Deze gegevens worden vervolgens op de volgende manieren opgehaald:

  • Attributen die in de kolom overflow zijn opgeslagen, worden toegevoegd aan het element dat de sql:overflow-field annotatie bevat.

  • De kindelementen en hun nakomelingen, opgeslagen in de overflowkolom in de database, worden toegevoegd als kindelementen volgens de expliciet gespecificeerde inhoud in het schema. (Er is geen orde bewaard gebleven.)

Voorbeelden

Om werkmonsters te maken met de volgende voorbeelden, moet je aan bepaalde eisen voldoen. Voor meer informatie, zie Vereisten voor het uitvoeren van SQLXML-voorbeelden.

Eén. Specificeren van sql:overflow-veld voor een element

Dit voorbeeld gaat ervan uit dat het volgende script is uitgevoerd zodat er een tabel bestaat genaamd Customers2 in de tempdb-database:

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  

Daarnaast moet je een virtuele directory aanmaken voor de tempdb-database en een sjabloon virtuele naam van sjabloontype genaamd "template".

In het volgende voorbeeld haalt het mappingschema de niet-gebruikte data op die is opgeslagen in de AddressOverflow-kolom van de Customers2-tabel:

<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>  
Om een voorbeeld van een XPath-query te testen tegen het schema
  1. Kopieer de bovenstaande schemacode en plak deze in een tekstbestand. Sla het bestand op als Overflow.xml.

  2. Kopieer het volgende sjabloon en plak het in een tekstbestand. Sla het bestand op als OverflowT.xml in dezelfde map waar je Overflow.xmlhebt opgeslagen. De query in de template selecteert de records in de Customers2-tabel.

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

    Het directorypad dat voor het mappingschema (Overflow.xml) is gespecificeerd is relatief tot de map waar het sjabloon wordt opgeslagen. Een absoluut pad kan ook worden gespecificeerd, bijvoorbeeld:

    mapping-schema="C:\SqlXmlTest\Overflow.xml"  
    
  3. Maak het SQLXML 4.0 Test Script (Sqlxml4test.vbs) aan en gebruik het om het sjabloon uit te voeren.

    Zie ADO gebruiken om SQLXML 4.0-query's uit te voeren voor meer informatie.

Dit is de resultatenset:

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