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


XML-adatok példányainak létrehozása

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Ez a cikk bemutatja, hogyan hozhat létre XML-példányokat.

Az SQL Serverben az alábbi módokon hozhat létre XML-példányokat:

  • Típuskonverzió sztringpéldányokon.
  • Használja a SELECT utasítást a FOR XML záradékkal.
  • Állandó hozzárendelések használata.
  • Tömeges terhelés használata.

Típuskonvertálás a string és bináris példányok között

Elemezheti bármelyik SQL Server-sztring adattípust, például [n]varchar, [n]char, [n]text, varbinaryés kép, xml adattípusba a sztringet az CAST adattípussá alakítva (CONVERT). A típus nélküli XML-t ellenőrzik, hogy meggyőződjenek arról, hogy jól formázott. Ha van séma társítva a xml- típushoz, az ellenőrzést is végrehajtják. További információért lásd: Típusos XML összehasonlítása a típus nélküli XML-lel.

Az XML-dokumentumok különböző kódolással kódolhatók (például UTF-8, UTF-16, Windows-1252). Az alábbiakban a sztring és a bináris forrástípusok az XML-dokumentum kódolásával és az elemző viselkedésével kapcsolatos szabályokat ismertetik.

Mivel nvarchar 2 bájtos Unicode-kódolást feltételez, például UTF-16 vagy UCS-2, az XML-elemző a sztringértéket 2 bájtos Unicode kódolású XML-dokumentumként vagy -töredékként kezeli. Az XML-dokumentumot 2 bájtos Unicode kódolással kell kódolni, valamint kompatibilisnek kell lennie a forrásadattípussal. Az UTF-16 kódolású XML-dokumentumok UTF-16 bájtsorrendjellel (BOM) rendelkezhetnek, de nem kell, mivel a forrástípus kontextusa egyértelművé teszi, hogy csak 2 bájtos Unicode kódolású dokumentum lehet.

A varchar sztring tartalmát az XML-elemző 1 bájtos kódolt XML-dokumentumként/töredékként kezeli. Mivel a varchar forrássztringhez kódlap van társítva, az elemző ezt a kódlapot használja a kódoláshoz, ha magában az XML-ben nincs megadva explicit kódolás. Ha egy XML-példány anyagjegyzékkel vagy kódolási deklarációval rendelkezik, az anyagjegyzéknek vagy a deklarációnak konzisztensnek kell lennie a kódlaplal, ellenkező esetben az elemző hibát jelez.

A varbináris tartalmát kódpont-adatfolyamként kezeli a rendszer, amelyet közvetlenül az XML-elemzőnek ad át. Ezért az XML-dokumentumnak vagy a töredéknek beágyazott módon kell megadnia a BOM-t vagy más kódolási információkat. Az elemző csak a streamet vizsgálja a kódolás meghatározásához. Ez azt jelenti, hogy az UTF-16 kódolású XML-nek biztosítania kell az UTF-16 BOM-t, és egy BOM nélküli és deklarációs kódolás nélküli példányt UTF-8-ként értelmezünk.

Ha az XML-dokumentum kódolása előre nem ismert, és az adatok xml-adatok helyett sztringként vagy bináris adatként kerülnek továbbításra, akkor az adatokat varbináriskell kezelnie. Ha például egy XML-fájlból olvas be adatokat OpenRowset()használatával, meg kell adnia a beolvasandó adatokat varbinary(max) értékként:

SELECT CAST(x AS XML)
FROM OpenRowset(BULK 'filename.xml', SINGLE_BLOB) R(x);

Az SQL Server belsőleg UTF-16 kódolást használó hatékony bináris reprezentációban jeleníti meg az XML-t. A felhasználó által biztosított kódolás nem marad meg, de az elemzési folyamat során figyelembe veszi.

Felhasználó által definiált CLR-típusok típuskonverziója

Ha a CLR felhasználó által definiált típusa XML-szerializálással rendelkezik, az ilyen típusú példányok explicit módon xml-adattípusba adhatók át. A CLR felhasználó által definiált típusú XML-szerializálásáról további információt a CLR-adatbázisobjektumok XML-szerializálása című témakörben talál.

Üres terület kezelése a beírt XML-fájlban

Az SQL Serverben a rendszer figyelmen kívül hagyja az elemtartalmon belüli üres területet, ha az csak üres karakterekből álló, jelölőnyelvvel tagolt sorozatban fordul elő, például kezdő vagy záró címkék esetén, és nincs entitássá alakítva. (CDATA szakaszok figyelmen kívül lesznek hagyva.) A szabad terület kezelésének ez a kezelése eltér a World Wide Web Consortium (W3C) által közzétett XML 1.0 specifikációtól. Ennek az az oka, hogy az SQL Server XML-elemzője csak korlátozott számú DTD-részhalmazt ismer fel az XML 1.0-ban meghatározottak szerint. Az SQL Serverben támogatott korlátozott DTD-részhalmazokról további információt CAST és CONVERTcímű témakörben talál.

Alapértelmezés szerint az XML-elemző elveti a jelentéktelen üres területet, amikor a sztringadatokat XML-vé alakítja, ha az alábbi lehetőségek valamelyike igaz:

  • A xml:space attribútum nincs definiálva egy elemen vagy annak őselemén.

  • Az elemre vagy annak egyik elődelemére érvényes xml:space attribútum alapértelmezett értékkel rendelkezik.

Például:

DECLARE @x XML;
SET @x = '<root>      <child/>     </root>';
SELECT @x;

Itt van az eredmények összessége.

<root><child/></root>

Ezt a viselkedést azonban módosíthatja. Az XML DT-példányok üres helyének megőrzéséhez használja a CONVERT operátort, továbbá az opcionális stílus paraméterét állítsa 1 értékre. Például:

SELECT CONVERT(XML, N'<root>      <child/>     </root>', 1);

Ha a stílus paraméter nincs használatban, vagy az értéke 0van beállítva, az xml DT-példány konvertálásához nem marad meg jelentéktelen üres terület. További információért arról, hogyan használjuk a CONVERT operátort és a stílus paraméterét, amikor karakterlánc adatokat xml DT-példányokká alakítjuk, lásd a CAST és CONVERTcímű témakört.

Példa: Sztringérték begépelt XML-fájlba való beírása és oszlophoz rendelése

Az alábbi példa egy XML-töredéket tartalmazó karakterlánc-változót helyez el az xml adattípusra, majd az xml típusú oszlopban tárolja:

CREATE TABLE T (
    c1 INT PRIMARY KEY,
    c2 XML
);
GO

DECLARE @s VARCHAR(100);

SET @s = '<Cust><Fname>Andrew</Fname><Lname>Fuller</Lname></Cust>';

A következő beszúrási művelet implicit módon konvertál egy sztringet xml- típusra:

INSERT INTO T
VALUES (3, @s);

A sztringet explicit módon CASTxml típusra:

INSERT INTO T
VALUES (3, CAST(@s AS XML));

Vagy használhatja a CONVERT, ahogyan az alábbi kódmintában látható:

INSERT INTO T
VALUES (3, CONVERT(XML, @s));

Példa: Sztring átalakítása beírt XML-fájllá, és hozzárendelése változóhoz

A következő példában egy karakterlánc xml- típussá alakul, majd hozzá van rendelve az xml adattípus egy változójához.

DECLARE @x XML;
DECLARE @s VARCHAR(100);

SET @s = '<Cust><Fname>Andrew</Fname><Lname>Fuller</Lname></Cust>';
SET @x = CONVERT(XML, @s);

SELECT @x;

A SELECT utasítás használata AZ XML-záradékkal

A FOR XML záradékot egy SELECT utasításban az eredmények XML-ként való visszaadásához használhatja. Például:

DECLARE @xmlDoc XML;

SET @xmlDoc = (
        SELECT Column1, Column2
        FROM Table1, Table2
        WHERE <some_condition>
        FOR XML AUTO
)
...;

A SELECT utasítás egy szöveges XML-töredéket ad vissza, amelyet aztán elemez a xml adattípus változóhoz való hozzárendelés során.

A TYPE direktívát az XML-lekérdezésekben is használhatja, a FOR XML záradékban, amely közvetlenül FOR XML lekérdezési eredményt ad vissza xml típusként:

DECLARE @xmlDoc XML;

SET @xmlDoc = (
        SELECT ProductModelID, Name
        FROM Production.ProductModel
        WHERE ProductModelID = 19
        FOR XML AUTO, TYPE
);

SELECT @xmlDoc;

Itt van az eredmények összessége.

<Production.ProductModel ProductModelID="19" Name="Mountain-100" />...

A következő példában egy lekérdezés beírt FOR XML eredménye xml típusú oszlopba kerül:

CREATE TABLE T1 (
    c1 INT,
    c2 XML
);
GO

INSERT T1 (c1, c2)
SELECT 1, (
        SELECT ProductModelID, Name
        FROM Production.ProductModel
        WHERE ProductModelID = 19
        FOR XML AUTO, TYPE
);

SELECT *
FROM T1;
GO

A FOR XMLtovábbi információkért lásd: FOR XML (SQL Server).

Megjegyzés:

Az SQL Server xml- adattípus-példányokat ad vissza az ügyfélnek különböző kiszolgálószerkezetek, például FOR XML lekérdezések eredményeként, amelyek a TYPE-irányelvet használják, vagy ahol az xml adattípus az SQL Server adatbázismotor oszlopaiból, változóiból és kimeneti paramétereiből származó XML-t adja vissza. Az ügyfélalkalmazás-kódban a ADO.NET szolgáltató azt kéri, hogy ezt a xml adattípus-információt bináris kódolással küldjék el a kiszolgálóról. Ha azonban a FOR XML-et használja a TYPE irányelv nélkül, az XML-adat sztringtípusként tér vissza. Mindenesetre az ügyfélszolgáltató mindig képes lesz kezelni az XML bármelyik formáját.

Állandó hozzárendelések használata

Használhat sztring állandót, ahol az xml adattípus egy példánya várható. Ez a feladat megegyezik egy értelmezett CAST karakterlánc XML-re történő átalakításával. Például:

DECLARE @xmlDoc XML;

SET @xmlDoc = '<Cust><Fname>Andrew</Fname><Lname>Fuller</Lname></Cust>';
-- Or
SET @xmlDoc = N'<?xml version="1.0" encoding="ucs-2"?><doc/>';

Az előző példa implicit módon átalakítja a sztringet az xml adattípusra, és hozzárendeli egy xml típusú változóhoz.

Az alábbi példa egy állandó sztringet szúr be egy xml típusú oszlopba:

CREATE TABLE T (
    c1 INT PRIMARY KEY,
    c2 XML
);

INSERT INTO T
VALUES (3, '<Cust><Fname>Andrew</Fname><Lname>Fuller</Lname></Cust>');

Megjegyzés:

A beírt XML-fájl esetében a rendszer ellenőrzi az XML-t a megadott sémán. További információért lásd: Típusos XML összehasonlítása a típus nélküli XML-lel.

Tömeges terhelés használata

A továbbfejlesztett OPENROWSET funkció lehetővé teszi XML-dokumentumok tömeges betöltését az adatbázisban. Az XML-példányokat tömegesen betöltheti fájlokból az adatbázis XML- típusoszlopaiba. Munkavégzési mintákért lásd: Példák XML-dokumentumok tömeges importálására és exportálására (SQL Server). További információ az XML-dokumentumok betöltéséről: XML-adatok betöltése.

Ebben a szakaszban

Cikk Leírás
XML-lekérdezési lehetőségek és a megőrzött adatok Az XML-példányok azon részeit ismerteti, amelyek nem maradnak meg az adatbázisokban való tároláskor.