Opciones de consulta XML y datos conservados

Se aplica a:SQL ServerAzure SQL DatabaseInstancia administrada de Azure SQLBase de datos SQL en Microsoft Fabric

En este artículo 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.

Establecer las opciones de consulta necesarias

Cuando se consultan columnas o variables de tipo xml mediante métodos de tipo de datos xml, deben configurarse las siguientes opciones como se muestra.

SET Opciones Valores requeridos
ANSI_NULLS ENCENDIDO
ANSI_PADDING ENCENDIDO
ANSI_WARNINGS ENCENDIDO
ARITHABORT ENCENDIDO
CONCAT_NULL_YIELDS_NULL ENCENDIDO
NUMERIC_ROUNDABORT Apagado
QUOTED_IDENTIFIER ENCENDIDO

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 .

Características de una instancia XML que no se mantienen

SQL Server mantiene el contenido de la instancia XML, pero no mantiene 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 mantiene 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/>.

La declaración XML, como <?xml version='1.0'?>, no se conserva al almacenar datos XML en una instancia del tipo de datos xml. es así por diseño. La declaración XML () y sus atributos (versión/codificación/independiente) se pierden cuando los datos se convierten 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 de la instancia XML.

Orden de atributos

El orden de los atributos de una instancia XML no se mantiene. 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 los valores de los atributos

Alrededor de los valores de atributo no se mantienen 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 sobre una columna de tipo xml, el resultado XML serializado puede devolver distintos prefijos de espacio 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>

Consulte también