Delen via


XML-gegevens laden

van toepassing op:SQL ServerAzure SQL Database-

U kunt XML-gegevens op verschillende manieren overbrengen naar SQL Server. Bijvoorbeeld:

  • Als u uw gegevens in een kolom [n]tekst of afbeelding in een SQL Server-database hebt, kunt u de tabel importeren met behulp van Integration Services. Wijzig het kolomtype in XML met behulp van de instructie ALTER TABLE.

  • U kunt uw gegevens bulksgewijs kopiĆ«ren uit een andere SQL Server-database door bcp uit te voeren en de gegevens vervolgens bulksgewijs in te voegen in de latere versiedatabase met behulp van bcp in.

  • Als u gegevens in relationele kolommen in een SQL Server-database hebt, maakt u een nieuwe tabel met een [n]tekstkolom en eventueel een primaire-sleutelkolom voor een rij-id. Gebruik programmeren aan de clientzijde om de XML op de server op te halen met FOR XML en deze naar de [n]tekst kolom te schrijven. Gebruik vervolgens de eerder genoemde technieken om gegevens over te dragen naar een latere versiedatabase. U kunt ervoor kiezen om de XML rechtstreeks in een XML-kolom in de database met latere versies te schrijven.

XML-gegevens bulksgewijs laden

U kunt XML-gegevens bulksgewijs laden in de server met behulp van de mogelijkheden voor bulksgewijs laden van SQL Server, zoals bcp. MET OPENROWSET kunt u gegevens vanuit bestanden in een XML-kolom laden. In het volgende voorbeeld ziet u dit punt.

Voorbeeld: XML laden uit bestanden

In dit voorbeeld ziet u hoe u een rij in tabel T invoegt. De waarde van de XML-kolom wordt geladen vanuit het bestand C:\MyFile\xmlfile.xml als CLOB en de kolom geheel getal krijgt de waarde 10.

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

Tekstcodering

SQL Server slaat XML-gegevens op in Unicode (UTF-16). XML-gegevens die van de server worden opgehaald, worden geleverd in UTF-16-codering. Als u een andere codering wilt, moet u de vereiste conversie uitvoeren op de opgehaalde gegevens. Soms bevinden de XML-gegevens zich in een andere codering. Als dat zo is, moet u voorzichtig zijn tijdens het laden van gegevens. Bijvoorbeeld:

  • Als uw tekst-XML zich in Unicode bevindt (UCS-2, UTF-16), kunt u deze zonder problemen toewijzen aan een XML-kolom, variabele of parameter.

  • Als de codering niet Unicode is en impliciet is vanwege de broncodepagina, moet de tekenreekscodepagina in de database hetzelfde zijn als of compatibel zijn met de codepunten die u wilt laden. Gebruik indien nodig COLLATE. Als er geen dergelijke servercodepagina bestaat, moet u een expliciete XML-declaratie met de juiste codering toevoegen.

  • Als u een expliciete codering wilt gebruiken, gebruikt u het varbinary() type, dat geen interactie heeft met codepagina's of een tekenreekstype van de juiste codepagina gebruikt. Wijs vervolgens de gegevens toe aan een XML-kolom, -variabele of -parameter.

Voorbeeld: Expliciet een codering opgeven

Stel dat u een XML-document, vcdoc, hebt opgeslagen als varchar(max) die geen expliciete XML-declaratie heeft. Met de volgende instructie wordt een XML-declaratie met de codering 'iso8859-1' toegevoegd, wordt het XML-document samengevoegd, wordt het resultaat omgezet in varbinary(max) zodat de byteweergave behouden blijft en ten slotte wordt geconverteerd naar XML. Hierdoor kan de XML-processor de gegevens parseren op basis van de opgegeven codering 'iso8859-1' en de bijbehorende UTF-16-weergave voor tekenreekswaarden genereren.

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

Tekenreekscoderingsincompatibiliteit

Als u XML kopieert en plakt als een letterlijke tekenreeks in het venster Queryeditor in SQL Server Management Studio, kunt u te maken hebben met [n]varchar tekenreekscoderingsproblemen. Dit is afhankelijk van de codering van uw XML-exemplaar. In veel gevallen kunt u de XML-declaratie verwijderen. Bijvoorbeeld:

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

Vervolgens moet u de tekenreeks vooraf laten gaan door een N om het XML-exemplaar een exemplaar van Unicode te maken. Bijvoorbeeld:

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

Zie ook