Laden von XML-Daten

Gilt für:SQL ServerAzure SQL-Datenbank

Sie können XML-Daten auf verschiedene Arten in SQL Server übertragen. Beispiel:

  • Wenn Sie Ihre Daten in einer [n]Text- oder Bildspalte in einer SQL Server-Datenbank haben, können Sie die Tabelle mithilfe von Integration Services importieren. Ändern Sie den Spaltentyp mithilfe der ALTER TABLE-Anweisung zu XML.

  • Sie können Ihre Daten mithilfe von bcp out aus einer anderen SQL Server-Datenbank in massenhin kopieren und dann mithilfe von bcp in die Datenbank der späteren Version massenweise einfügen.

  • Wenn Sie Daten in relationalen Spalten in einer SQL Server-Datenbank haben, erstellen Sie eine neue Tabelle mit einer [n]Textspalte und optional eine Primärschlüsselspalte für einen Zeilenbezeichner. Rufen Sie mithilfe clientseitiger Programmierung den XML-Code ab, der mit FOR XML auf dem Server generiert wurde, und schreiben Sie ihn in die [n]text -Spalte. Verwenden Sie dann die oben erwähnten Techniken, um die Daten in eine höhere Version der Datenbank zu übertragen. Sie können den XML-Code auch direkt in eine XML-Spalte in der Datenbank der höheren Version schreiben.

Massenlade-XML-Daten

Sie können XML-Daten massenweise in den Server laden, indem Sie die Massenladefunktionen von SQL Server verwenden, z. B. bcp. Mit OPENROWSET können Sie Daten aus Dateien in eine XML-Spalte laden. Das folgende Beispiel zeigt dieses Problem.

Beispiel: Laden von XML aus Dateien

In diesem Beispiel wird gezeigt, wie eine Zeile in Tabelle T eingefügt wird. Der Wert der XML-Spalte wird aus der Datei C:\MyFile\xmlfile.xml als CLOB geladen, und die ganze Zahl wird der Wert 10 angegeben.

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

Textcodierung

SQL Server speichert XML-Daten in Unicode (UTF-16). Die vom Server abgerufenen XML-Daten liegen UTF-16-codiert vor. Wenn Sie eine andere Codierung wünschen, müssen Sie die erforderliche Konvertierung für die abgerufenen Daten ausführen. Manchmal können die XML-Daten in einer abweichenden Codierung vorliegen. Wenn das der Fall ist, müssen Sie beim Laden der Daten mit großer Sorgfalt vorgehen. Beispiel:

  • Wenn Ihre Text-XML-Daten in Unicode (UCS-2, UTF-16) vorliegen, können Sie sie problemlos einer XML-Spalte, einer XML-Variablen oder einem XML-Parameter zuweisen.

  • Wenn die Codierung nicht Unicode ist und aufgrund der Quellcodeseite implizit ist, sollte die Zeichenfolgencodeseite in der Datenbank mit den Codepunkten identisch sein, die Sie laden möchten. Verwenden Sie bei Bedarf COLLATE. Wenn keine solche Servercodeseite vorhanden ist, müssen Sie eine explizite XML-Deklaration mit der richtigen Codierung hinzufügen.

  • Verwenden Sie entweder den varbinary() -Typ, der keinerlei Interaktion mit Codeseiten aufweist, oder einen Zeichenfolgentyp der entsprechenden Codeseite, damit eine explizite Codierung verwendet wird. Weisen Sie anschließend die Daten einer XML-Spalte, einer XML-Variablen oder einem XML-Parameter zu.

Beispiel: Explizite Angabe einer Codierung

Angenommen, Sie verfügen über ein XML-Dokument, vcdoc, das als varchar(max) gespeichert ist und keine explizite XML-Deklaration enthält. Mit der folgenden Anweisung wird eine XML-Deklaration mit der Codierung „iso8859-1“ hinzugefügt, das XML-Dokument verkettet, das Ergebnis in varbinary(max) umgewandelt, sodass die Bytedarstellung erhalten bleibt, und das Ergebnis schließlich in XML umgewandelt. Das ermöglicht es dem XML-Prozessor, die Daten entsprechend der angegebenen Codierung "iso8859-1" zu analysieren und die entsprechende UTF-16-Darstellung für Zeichenfolgenwerte zu generieren.

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

Zeichenfolgencodierungsinkompatibilitäten

Wenn Sie XML als Zeichenfolgenliteral in das Abfrage-Editor-Fenster in SQL Server Management Studio kopieren und einfügen, können [n]varchar string encoding incompatibilities auftreten. Dies hängt von der Codierung Ihrer XML-Instanz ab. In vielen Fällen möchten Sie die XML-Deklaration möglicherweise entfernen. Beispiel:

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

Anschließend sollten Sie der Zeichenfolge N ein Präfix voranstellen, um die XML-Instanz zu einer Unicode-Instanz zu machen. Beispiel:

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

Siehe auch