Recuperar y consultar datos XML
En este tema se describen las opciones de consulta que se tienen que especificar para consultar datos XML. También describe las partes de las instancias XML que no se conservan cuando se almacenan en bases de datos.
En este tema
Características de una instancia de XML que no se mantienen
Establecer opciones de consulta necesarias
Características de una instancia de XML que no se mantienen
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.
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.
[ARRIBA]
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.
[ARRIBA]
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" />.
[ARRIBA]
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>
[ARRIBA]
Establecer opciones de consulta necesarias
Cuando se consultan variables o columnas de tipo xml mediante métodos del tipo de datos xml, se deben establecer las siguientes opciones como se indica.
Opciones de SET |
Valores requeridos |
---|---|
ANSI_NULLS |
ON |
ANSI_PADDING |
ON |
ANSI_WARNINGS |
ON |
ARITHABORT |
ON |
CONCAT_NULL_YIELDS_NULL |
ON |
NUMERIC_ROUNDABORT |
OFF |
QUOTED_IDENTIFIER |
ON |
Si no se establecen las opciones como se indica, no funcionarán las consultas y modificaciones de los métodos del tipo de datos xml.
[ARRIBA]