Cargar datos XML

Se aplica a:SQL ServerAzure SQL Database

Puede transferir datos XML a SQL Server de varias formas. Por ejemplo:

  • Si tiene los datos en una columna de [n]texto o imagen en una base de datos SQL Server, puede importar la tabla mediante servicios de integración. Cambie el tipo de columna a XML mediante la instrucción ALTER TABLE.

  • Puede copiar sus datos de forma masiva desde otra base de datos SQL Server mediante bcp out y, a continuación, insertar los datos de forma masiva en la base de datos de la versión posterior mediante bcp in.

  • Si tiene datos en columnas relacionales en una base de datos SQL Server, cree una nueva tabla con una columna [n]text y, opcionalmente, una columna de clave primaria para un identificador de fila. Use programación del lado cliente para recuperar el XML que se genera en el servidor con FOR XML y escribirlo en la columna [n]text . A continuación, use las técnicas mencionadas previamente para transferir datos a una base de datos de una versión posterior. Puede optar por escribir el XML directamente en una columna XML en la base de datos de la versión posterior.

Carga masiva de datos XML

Puede cargar datos XML de forma masiva en el servidor mediante las funciones de carga masiva de SQL Server, como bcp. OPENROWSET permite cargar datos en una columna XML desde archivos. El siguiente ejemplo muestra este aspecto.

Ejemplo: cargar XML desde archivos

Este ejemplo muestra cómo insertar una fila en la tabla T. El valor de la columna XML se carga desde el archivo C:\MyFile\xmlfile.xml como CLOB y se suministra el valor 10 a la columna de enteros.

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

Codificación de texto

SQL Server almacena los datos XML en Unicode (UTF-16). Los datos XML recuperados del servidor se reciben con codificación UTF-16. Si desea otra codificación, tendrá que realizar la conversión necesaria en los datos recuperados. En ocasiones, los datos XML pueden tener una codificación distinta. Si éste es el caso, debe prestar atención al cargar los datos. Por ejemplo:

  • Si el XML de texto es Unicode (UCS-2, UTF-16), puede asignarlo a una columna, una variable o un parámetro XML sin problemas.

  • Si la codificación no es Unicode y está implícita, debido a la página de códigos original, la página de códigos de cadena de la base de datos debe coincidir o ser compatible con los puntos de código que desea cargar. Si es necesario, use COLLATE. Si no existe tal página de códigos de servidor, deberá agregar una declaración XML explícita con la codificación correcta.

  • Para usar una codificación explícita, use el tipo varbinary() , que no tiene interacción con páginas de códigos, o un tipo de cadena de la página de códigos apropiada. A continuación, asigne los datos a una columna, una variable o un parámetro XML.

Ejemplo: especificar explícitamente una codificación

Imagine que tiene un documento XML, vcdoc, almacenado como varchar(max) que no tiene una declaración XML explícita. La instrucción siguiente agrega una declaración XML con la codificación "iso8859-1", concatena el documento XML, convierte el resultado a varbinary(max) de modo que se preserve la representación de bytes y, finalmente, lo convierte a XML. De este modo, se habilita el procesador XML para analizar los datos según la codificación especificada "iso8859-1" y generar la representación UTF-16 correspondiente para los valores de cadena.

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

Incompatibilidades de codificación de cadenas

Si copia y pega XML como cadena literal en la ventana Editor de consultas de SQL Server Management Studio, es posible que experimente incompatibilidades de codificación de cadenas [n]varchar. Esto dependerá de la codificación de la instancia XML. En muchos casos, es posible que se desee quitar la declaración XML. Por ejemplo:

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

A continuación, debe prefijar la cadena con N para convertir la instancia XML en una instancia de Unicode. Por ejemplo:

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

Consulte también