Megosztás a következőn keresztül:


A felmerült adatok visszakeresése a sql:overflow-field (SQLXML 4.0) segítségével

A következőkre vonatkozik:SQL ServerAzure SQL Database

Amikor az Transact-SQL OPENXML függvény segítségével XML dokumentumból az adatbázisba helyeznek be rekordokat, az összes fel nem használt adat a forrás XML dokumentumból egy oszlopban tárolható. Amikor annotált sémák segítségével adatokat gyűjt egy adatbázisból, megadhatod a sql:overflow-field attribútumot, hogy azonosítsd azt az oszlopot a táblázatban, ahol a túlcsordulási adatok tárolódnak. A sql:overflow-field attribútuma elemen meghatározható<>.

Ezt az adatot ezeken a következő módokon szerezzük vissza:

  • Az overflow oszlopban tárolt attribútumokat hozzáadják ahhoz az elemhez, amely tartalmazza a sql:overflow-field annotációt.

  • A gyermekelemek és leszármazottaik, amelyeket az adatbázis túlcsordulás oszlopában tárolnak, gyermekelemként kerülnek hozzáadásra a sémában kifejezetten meghatározott tartalom után. (A rend nem marad fenn.)

Példák

A következő példák alapján működő minták létrehozásához bizonyos követelményeknek kell megfelelned. További információért lásd: Az SQLXML futtatási követelmények példái.

A. Sql:overflow-field meghatározása egy elemhez

Ez a példa feltételezi, hogy a következő szkriptet futtattuk, így létezik egy Customers2 nevű tábla a tempdb adatbázisban:

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  

Ezen felül létre kell hoznod egy virtuális könyvtárat a tempdb adatbázishoz – és egy sablon virtuális nevet sablon típusú, "template" nevű sablont.

A következő példában a leképezési séma visszanyeri a Customers2 tábla AddressOverflow oszlopában tárolt elfogyasztatlan adatokat:

<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>  
Egy minta-XPath lekérdezés tesztelése a sémához
  1. Másold le a fenti sémakódot, és illesztsd be egy szövegfájlba. Mentse el a fájlt Overflow.xml.

  2. Másold le a következő sablont, és illesztsd be egy szövegfájlba. Mentsd a fájlt OverflowT.xml-ként ugyanabba a könyvtárba, ahol Overflow.xmlmentetted. A sablonban található lekérdezés kiválasztja a Customers2 táblában található rekordokat.

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

    A leképezési sémához (Overflow.xml) megadott könyvtári út viszonyítja azt a könyvtárat, ahol a sablon mentő. Abszolút út is meghatározható, például:

    mapping-schema="C:\SqlXmlTest\Overflow.xml"  
    
  3. Hozd létre és használd az SQLXML 4.0 Test Scriptet (Sqlxml4test.vbs) a sablon végrehajtásához.

    További információ: SqlXML 4.0-lekérdezések végrehajtása az ADO használatával.

Az eredményhalmaz a következő:

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