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


XML-adatok betöltése

Vonatkozik a következőkre:SQL ServerAzure SQL DatabaseSQL adatbázis a Microsoft Fabric-ben

Az XML-adatokat többféleképpen is átviheti az SQL Serverre. Például:

  • Ha egy SQL Server-adatbázis [n]szöveg- vagy képoszlopában található az adatai, az Integration Services használatával importálhatja a táblát. Módosítsa az oszloptípust XML-re az ALTER TABLE utasítással.

  • Az adatokat tömegesen átmásolhatja egy másik SQL Server-adatbázisból a bcp out használatával, majd tömegesen beszúrhatja az adatokat a későbbi verzióadatbázisba a bcp in használatával.

  • Ha egy SQL Server-adatbázisban relációs oszlopokban található adatokkal rendelkezik, hozzon létre egy új táblát [n]szövegoszlopmal, és szükség esetén egy sorazonosító elsődleges kulcsoszlopával. Ügyféloldali programozással lekérheti a kiszolgálón létrehozott XML-t a FOR XML használatával, és beírhatja a [n]szöveges oszlopba. Ezután használja a korábban említett technikákat az adatok egy későbbi verziós adatbázisba való átviteléhez. Dönthet úgy, hogy az XML-t közvetlenül egy XML-oszlopba írja a későbbi verzióadatbázisban.

XML-adatok tömeges betöltése

Az XML-adatokat tömegesen betöltheti a kiszolgálóra az SQL Server tömeges betöltési képességeinek, például a bcp-nek a használatával. Az OPENROWSET lehetővé teszi, hogy adatokat töltsön be egy XML-oszlopba fájlokból. Az alábbi példa ezt a pontot szemlélteti.

Példa: XML betöltése fájlokból

Ez a példa bemutatja, hogyan szúrhat be egy sort a T táblába. Az XML-oszlop értéke CLOB-ként van betöltve a C:\MyFile\xmlfile.xml fájlból, az egész oszlop pedig a 10 értéket adja meg.

INSERT INTO T
SELECT 10, xCol
FROM    (SELECT *
    FROM OPENROWSET (BULK 'C:\MyFile\xmlfile.xml', SINGLE_BLOB)
AS xCol) AS R(xCol);

Szövegkódolás

Az SQL Server AZ XML-adatokat Unicode-ban (UTF-16) tárolja. A kiszolgálóról lekért XML-adatok UTF-16 kódolásban jönnek létre. Ha másik kódolást szeretne, a szükséges átalakítást a lekért adatokon kell elvégeznie. Előfordulhat, hogy az XML-adatok más kódolásban vannak. Ha igen, az adatbetöltés során óvatosan kell eljárni. Például:

  • Ha a szöveges XML Unicode-ban van (UCS-2, UTF-16), probléma nélkül hozzárendelheti egy XML-oszlophoz, változóhoz vagy paraméterhez.

  • Ha a kódolás nem Unicode, és implicit, a forráskódlap miatt az adatbázis sztringkódlapjának meg kell egyeznie a betölteni kívánt kódpontokkal vagy kompatibilisnek kell lennie. Szükség esetén használja a COLLATE parancsot. Ha nincs ilyen kiszolgálókódlap, explicit XML-deklarációt kell hozzáadnia a megfelelő kódolással.

  • Explicit kódolás használatához használja a varbinary() típust, amely nem kommunikál a kódlapokkal, vagy használja a megfelelő kódlap sztringtípusát. Ezután rendelje hozzá az adatokat egy XML-oszlophoz, változóhoz vagy paraméterhez.

Példa: A kódolás explicit megadása

Tegyük fel, hogy varchar(max) olyan XML-dokumentumot (vcdoc) tárol, amely nem rendelkezik explicit XML-deklarációval. Az alábbi utasítás egy XML-deklarációt ad hozzá az "iso8859-1" kódolással, összefűzi az XML-dokumentumot, az eredményt varbinary(max) típusra alakítja, hogy a bájtok ábrázolása megmaradjon, majd végül átalakítja XML-be. Ez lehetővé teszi, hogy az XML-feldolgozó az adatokat a megadott "iso8859-1" kódolásnak megfelelően elemezhesse, és létrehozza a sztringértékek megfelelő UTF-16-ábrázolást.

SELECT CAST(
CAST (('<?xml version="1.0" encoding="iso8859-1"?>'+ vcdoc) AS VARBINARY (MAX))
AS XML);

Sztringkódolási inkompatibilitások

Ha az XML-t sztringkonstansként másolja és illessze be az SQL Server Management Studio Lekérdezésszerkesztő ablakába, előfordulhat, hogy [n]varchar sztringkódolási inkompatibilitást tapasztal. Ez az XML-példány kódolásától függ. Sok esetben érdemes lehet eltávolítani az XML-deklarációt. Például:

<?xml version="1.0" encoding="UTF-8"?>
  <xsd:schema ...

Ezután a N előtagot kell hozzáadni a karakterlánchoz, hogy az XML-példány Unicode-példány legyen. Például:

-- Assign XML instance to a variable.
DECLARE @X XML
SET @X = N'...'
-- Insert XML instance into an xml type column.
INSERT INTO T VALUES (N'...')
-- Create an XML schema collection
CREATE XML SCHEMA COLLECTION XMLCOLL1 AS N'<xsd:schema ... '

Lásd még: