Funciones de extensión de XQuery: sql:variable()
Se aplica a:SQL Server
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 Enlace de datos relacionales dentro de XML, puede usar esta función al usar métodos de tipo de datos XML para exponer un valor relacional dentro de XQuery.
Por ejemplo, el método query() se usa para especificar una consulta en una instancia XML que se almacena en una variable o columna de tipo de datos xml . A veces, es posible que también desee que la consulta use valores de una variable de Transact-SQL o un parámetro para reunir datos relacionales y XML. Para ello, use la función sql:variable .
El valor SQL se asignará a un valor XQuery correspondiente y su tipo será un tipo base XQuery equivalente al tipo SQL correspondiente.
Solo puede hacer referencia a una instancia xml en el contexto de la expresión de origen de una instrucción insert XML-DML; de lo contrario, no puede hacer referencia a 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 usa para enlazar este valor en el XML.Un valor (
ListPrice
) de una columna no XML de otra tabla. De nuevo, se utilizasql:column()
para enlazar este valor en el XML.Valor (
DiscountPrice
) de una variable de Transact-SQL. El métodosql:variable()
se utiliza para enlazar este valor en el XML.Valor (
ProductModelName
) de una columna de tipo xml para que la consulta sea más interesante.
Esta 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
namespace
palabra clave se usa para definir un prefijo de espacio de nombres en el prólogo de XQuery. Esto se hace porque el valor del atributoProductModelName
se recupera de la columna de tipoCatalogDescription 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" />
Consulte también
Funciones de extensión de XQuery en SQL Server
Comparar XML con tipo y XML sin tipo
Datos XML (SQL Server)
Crear instancias de datos XML
Métodos del tipo de datos xml
Lenguaje de manipulación de datos XML (XML DML)