Sdílet prostřednictvím


Načtení dat XML

platí pro:SQL Serverazure SQL Database

Data XML můžete do SQL Serveru přenášet několika způsoby. Například:

  • Pokud máte data ve sloupci [n]textu nebo obrázku v databázi SQL Serveru, můžete tabulku importovat pomocí integračních služeb. Pomocí příkazu ALTER TABLE změňte typ sloupce na XML.

  • Data můžete hromadně zkopírovat z jiné databáze SQL Serveru pomocí příkazu bcp out a pak je hromadně vložit do databáze novější verze pomocí nástroje bcp in.

  • Pokud máte data v relačních sloupcích v databázi SQL Serveru, vytvořte novou tabulku s [n]textovým sloupcem a volitelně sloupcem primárního klíče pro identifikátor řádku. Programování na straně klienta použijte k načtení XML vygenerovaného na serveru pomocí příkazu FOR XML a jeho zápisu do [n]textového sloupce. Potom použijte dříve uvedené techniky k přenosu dat do databáze novější verze. Kód XML můžete zapsat přímo do sloupce XML v novější verzi databáze.

Hromadné načtení dat XML

Data XML můžete hromadně načíst na server pomocí funkcí hromadného načítání SQL Serveru, jako je například bcp. OPENROWSET umožňuje načíst data do sloupce XML ze souborů. Následující příklad ukazuje tento bod.

Příklad: Načtení XML ze souborů

Tento příklad ukazuje, jak vložit řádek do tabulky T. Hodnota sloupce XML je načtena ze souboru C:\MyFile\xmlfile.xml jako CLOB a celočíselnému sloupci je přiřazena hodnota 10.

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

Kódování textu

SQL Server ukládá data XML v kódování Unicode (UTF-16). Data XML načtená ze serveru přicházejí v kódování UTF-16. Pokud chcete jiné kódování, musíte provést požadovaný převod na načtených datech. Někdy mohou být data XML v jiném kódování. Pokud ano, je třeba být opatrný při načítání dat. Například:

  • Pokud je text XML v kódování Unicode (UCS-2, UTF-16), můžete ho přiřadit ke sloupci XML, proměnné nebo parametru bez jakýchkoli problémů.

  • Pokud kódování není Unicode a je implicitní kvůli znakovému kódování zdroje, měla by být znaková stránka řetězce v databázi stejná nebo kompatibilní s kódovými body, které chcete načíst. V případě potřeby použijte funkci COLLATE. Pokud žádná taková znaková stránka serveru neexistuje, musíte přidat explicitní deklaraci XML se správným kódováním.

  • Pokud chcete použít explicitní kódování, použijte buď varbinary() typ, který nemá žádnou interakci se znakovými stránkami, nebo použijte typ řetězce příslušné znakové stránky. Potom přiřaďte data ke sloupci XML, proměnné nebo parametru.

Příklad: Explicitní určení kódování

Předpokládejme, že máte dokument XML, vcdoc, uložený jako varchar(max), který nemá explicitní deklaraci XML. Následující příkaz přidá deklaraci XML s kódováním iso8859-1, zřetězí dokument XML, přetypuje výsledek na varbinary(max) tak, aby se reprezentace bajtů zachovala a nakonec jej přetypuje do XML. To umožňuje procesoru XML analyzovat data podle zadaného kódování "iso8859-1" a vygenerovat odpovídající reprezentaci UTF-16 pro řetězcové hodnoty.

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

Nekompatibility kódování řetězců

Pokud zkopírujete a vložíte XML jako textový řetězec do okna Editoru dotazů v aplikaci SQL Server Management Studio, může dojít k nekompatibilitě v kódování řetězců [n]varchar. To bude záviset na kódování vaší instance XML. V mnoha případech můžete chtít odebrat deklaraci XML. Například:

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

Pak byste měli předponu řetězce N, aby se instance XML stala instancí Unicode. Například:

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

Viz také