sql:variable() (función de XQuery)
Expone una variable que contiene un valor relacional SQL dentro de una expresión XQuery.
Sintaxis
sql:variable("variableName") as xdt:anyAtomicType?
Comentarios
Como se describe en el tema Enlazar datos relacionales dentro de datos XML, esta función se puede usar cuando se utilicen los métodos de tipo de datos XML para exponer un valor relacional dentro de XQuery.
Por ejemplo, el método query() sirve para especificar una consulta en una instancia XML que está almacenada en una columna o variable de tipo de datos xml. En ocasiones, es posible que también se desee que la consulta utilice valores de una variable Transact-SQL, o un parámetro, para combinar los datos relacionales y XML. Para ello, se utiliza la función sql:variable.
El valor SQL se asignará a un valor de XQuery correspondiente y su tipo será un tipo base de XQuery que es equivalente al tipo SQL correspondiente.
Solo puede hacer referencia a una instancia de xml en el contexto de la expresión de origen de una instrucción de inserción de XML-DML; de lo contrario, no puede hacer referencia a los valores que son de tipo xml o de un tipo definido por el usuario de Common Language Runtime (CLR).
Ejemplos
A.Usar la función sql:variable() para incorporar una variable Transact-SQL a XML
En el siguiente ejemplo se crea una instancia XML formada por los siguientes elementos:
Un valor (ProductID) de una columna no XML. La función sql:column() se utiliza para enlazar este valor en el XML.
Un valor (ListPrice) de una columna no XML de otra tabla. De nuevo, se utiliza sql:column() para enlazar este valor en el XML.
Un valor (DiscountPrice) de una variable Transact-SQL. El método sql:variable() se utiliza para enlazar este valor en el XML.
Un valor (ProductModelName) de una columna de tipo xml para que la consulta sea más interesante.
Ésta es la consulta:
DECLARE @price money
SET @price=2500.00
SELECT ProductID, Production.ProductModel.ProductModelID,CatalogDescription.query('
declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
<Product
ProductID="{ sql:column("Production.Product.ProductID") }"
ProductModelID= "{ sql:column("Production.Product.ProductModelID") }"
ProductModelName="{/pd:ProductDescription[1]/@ProductModelName }"
ListPrice="{ sql:column("Production.Product.ListPrice") }"
DiscountPrice="{ sql:variable("@price") }"
/>')
FROM Production.Product
JOIN Production.ProductModel
ON Production.Product.ProductModelID = Production.ProductModel.ProductModelID
WHERE ProductID=771
Observe lo siguiente en la consulta anterior:
La función XQuery incluida en el método query() construye el XML.
La palabra clave namespace se utiliza para definir un prefijo de espacio de nombres en el prólogo de las consultas XQuery. Esto se hace porque el valor del atributo ProductModelName se recupera de la columna de tipo CatalogDescription xml, que tiene un esquema asociado a ella.
El resultado es el siguiente:
<Product ProductID="771" ProductModelID="19"
ProductModelName="Mountain 100"
ListPrice="3399.99" DiscountPrice="2500" />
Vea también
Referencia
Funciones de extensión de XQuery en SQL Server
Conceptos
Comparar XML con tipo y XML sin tipo
Lenguaje de manipulación de datos XML (XML DML)