Dela via


Läsa in XML-data

gäller för:SQL ServerAzure SQL Database

Du kan överföra XML-data till SQL Server på flera sätt. Till exempel:

  • Om du har dina data i en [n]text- eller bildkolumn i en SQL Server-databas kan du importera tabellen med hjälp av Integration Services. Ändra kolumntypen till XML med hjälp av ALTER TABLE-instruktionen.

  • Du kan masskopiera dina data från en annan SQL Server-databas med bcp out och sedan massinfogara data i den senare versionsdatabasen med hjälp av bcp in.

  • Om du har data i relationskolumner i en SQL Server-databas skapar du en ny tabell med en [n]textkolumn och, om du vill, en primär nyckelkolumn för en radidentifierare. Använd programmering på klientsidan för att hämta DEN XML som genereras på servern med FOR XML och skriva den i kolumnen [n]text. Använd sedan de tidigare nämnda teknikerna för att överföra data till en senare version av databasen. Du kan välja att skriva XML till en XML-kolumn i den senare versionsdatabasen direkt.

Massinläsning av XML-data

Du kan massinläsa XML-data till servern med hjälp av funktionerna för massinläsning av SQL Server, till exempel bcp. MED OPENROWSET kan du läsa in data i en XML-kolumn från filer. I följande exempel visas den här punkten.

Exempel: Läsa in XML från filer

Det här exemplet visar hur du infogar en rad i tabell T. Värdet för XML-kolumnen läses in från filen C:\MyFile\xmlfile.xml som CLOB, och heltalskolumnen har värdet 10.

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

Textkodning

SQL Server lagrar XML-data i Unicode (UTF-16). XML-data som hämtas från servern kommer ut i UTF-16-kodning. Om du vill ha en annan kodning måste du utföra den nödvändiga konverteringen på hämtade data. Ibland kan XML-data finnas i en annan kodning. I så fall måste du vara försiktig vid datainläsning. Till exempel:

  • Om din text-XML finns i Unicode (UCS-2, UTF-16) kan du tilldela den till en XML-kolumn, variabel eller parameter utan problem.

  • Om kodningen inte är Unicode och är implicit, på grund av källkodssidan, bör strängkodsidan i databasen vara samma som eller kompatibel med de kodpunkter som du vill läsa in. Om det behövs använder du COLLATE. Om det inte finns någon sådan serverkodsida måste du lägga till en explicit XML-deklaration med rätt kodning.

  • Om du vill använda en explicit kodning använder du antingen varbinary() typ, som inte har någon interaktion med kodsidor, eller använder en strängtyp för lämplig kodsida. Tilldela sedan data till en XML-kolumn, variabel eller parameter.

Exempel: Ange explicit en kodning

Anta att du har ett XML-dokument, vcdoc, lagrat som varchar(max) som inte har någon explicit XML-deklaration. Följande instruktion lägger till en XML-deklaration med kodningen "iso8859-1", sammanfogar XML-dokumentet, omvandlar resultatet till varbinary(max) så att byterepresentationen bevaras och slutligen omvandlar den till XML. Detta gör det möjligt för XML-processorn att parsa data enligt den angivna kodningen "iso8859-1" och generera motsvarande UTF-16-representation för strängvärden.

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

Inkompatibiliteter för strängkodning

Om du kopierar och klistrar in XML som en strängbokstavligt i fönstret för frågeredigering i SQL Server Management Studio kan inkompatibiliteter med [n]varchar strängkodning uppstå. Detta beror på kodningen av XML-instansen. I många fall kanske du vill ta bort XML-deklarationen. Till exempel:

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

Du bör sedan prefixa strängen med en N för att göra XML-instansen till en instans av Unicode. Till exempel:

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

Se även