Compartir a través de


Recuperar datos XML

SQL Server conserva el contenido de la instancia XML, pero no conserva los aspectos de la instancia XML que no se consideran significativos en el modelo de datos XML. Esto significa que una instancia XML recuperada no podría ser idéntica a la instancia que se almacenó en el servidor pero contendrá la misma información.

Este tema describe las partes de instancias XML que no se conservan cuando están almacenadas en bases de datos.

Declaración XML

La declaración XML de una instancia no se conserva cuando la instancia está almacenada en la base de datos. Por ejemplo:

CREATE TABLE T1 (Col1 int primary key, Col2 xml)
GO
INSERT INTO T1 values (1, '<?xml version="1.0" encoding="windows-1252" ?><doc></doc>')
GO
SELECT Col2
FROM T1

El resultado es <doc/>.

No se conserva la declaración XML, como <?xml version='1.0'?>, al almacenar los datos XML en una instancia de tipo de datos xml. Esto es así por cuestiones de diseño. La declaración XML (<?xml ... ?>) y sus atributos (versión/codificación/independiente) se pierden una vez que los datos se han convertido al tipo xml. La declaración XML se trata como una directiva del analizador XML. Los datos XML se almacenan internamente como ucs-2. Se conservan todos los demás PI en la instancia XML.

Orden de atributos

El orden de los atributos de una instancia XML no se conserva. Al consultar la instancia XML almacenada en la columna de tipo xml, el orden de los atributos del XML resultante puede diferir con respecto a la instancia XML original.

Comillas alrededor de valores de atributo

Alrededor de los valores de atributo no se conservan las comillas simples ni las comillas dobles. Los valores de atributo se almacenan en la base de datos como un par de nombre y valor. Las comillas no se almacenan. Cuando se ejecuta una consulta XQuery en una instancia XML, el XML resultante se serializa con comillas dobles alrededor de los valores de atributo.

DECLARE @x xml
-- Use double quotation marks.
SET @x = '<root a="1" />'
SELECT @x
GO
DECLARE @x xml
-- Use single quotation marks.
SET @x = '<root a=''1'' />'
SELECT @x
GO

Las dos consultas devuelven = <root a="1" />.

Prefijos de espacio de nombres

No se conservan los prefijos de espacios de nombres. Cuando se especifica XQuery en una columna de tipo xml, el resultado XML serializado puede devolver distintos prefijos de espacios de nombres.

DECLARE @x xml
SET @x = '<ns1:root xmlns:ns1="abc" xmlns:ns2="abc">
            <ns2:SomeElement/>
          </ns1:root>'
SELECT @x
SELECT @x.query('/*')
GO

El prefijo de espacio de nombres del resultado puede ser distinto. Por ejemplo:

<p1:root xmlns:p1="abc"><p1:SomeElement/></p1:root>

Vea también

Conceptos