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:
sql:column() Function (XQuery). Le permite usar los valores de una columna relacional en la expresión XQuery o XML DML.
sql:variable() Function (XQuery). Le permite utilizar el valor de una variable de SQL en la expresión XQuery o XML DML.
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.