Compartir vía


Enlazar datos relacionales dentro de datos XML

Se aplica a: SQL ServerAzure SQL Database Azure SQL Instancia administrada

Puede especificar métodos de tipo de datos xml con una variable de tipo de datos o columna xml. Por ejemplo, query() (método de tipo de datos xml) ejecuta la instrucción XQuery especificada con una instancia XML. Cuando se genera XML de esta manera, se puede utilizar un valor de un tipo de columna que no es XML o una variable Transact-SQL. Este proceso se conoce como enlazar datos relacionales dentro de XML.

Para enlazar datos relacionales no XML dentro de XML, el motor de base de datos de SQL Server proporciona estas seudofunciones:

Estas funciones se pueden usar con métodos de tipo de datos xml siempre que se quiera exponer un valor relacional dentro de XML.

Estas funciones no se pueden usar para hacer referencia a datos en columnas o variables de tipo xml, de tipos definidos por el usuario CLR, datetime, smalldatetime, text, ntext, sql_variant e image.

Asimismo, este enlace es de solo lectura. En otras palabras, no se pueden escribir datos en las columnas que utilicen estas funciones. Por ejemplo, no se permite sql:variable("@x")="una expresión".

Ejemplo: consulta entre dominios mediante sql:variable()

Este ejemplo muestra cómo sql:variable() puede permitir a una aplicación parametrizar una consulta. El ISBN se pasa mediante una variable SQL @isbn. Sustituyendo la constante por sql:variable() , la consulta sirve para buscar cualquier ISBN y no solo el que corresponde a 0-7356-1588-2.

DECLARE @isbn VARCHAR(20)  
SET     @isbn = '0-7356-1588-2'  
SELECT  xCol  
FROM    T  
WHERE   xCol.exist ('/book/@ISBN[. = sql:variable("@isbn")]') = 1  

sql:column() se puede usar de manera similar y ofrece otras ventajas. Los índices de la columna favorecen la eficiencia, según lo decida el optimizador de consultas basado en costos. Además, la columna calculada puede almacenar una propiedad promocionada.

Consulte también