Partilhar via


Funções de Extensão XQuery – sql:variable()

Aplica-se: SQL Server

Expõe uma variável que contém um valor relacional SQL dentro de uma expressão XQuery.

Sintaxe

  
sql:variable("variableName") as xdt:anyAtomicType?  

Comentários

Conforme descrito no tópico Vinculando dados relacionais dentro de XML, você pode usar essa função ao usar métodos de tipo de dados XML para expor um valor relacional dentro de XQuery.

Por exemplo, o método query() é usado para especificar uma consulta em uma instância XML armazenada em uma variável ou coluna de tipo de dados xml . Às vezes, você também pode querer que sua consulta use valores de uma variável ou parâmetro Transact-SQL para reunir dados relacionais e XML. Para fazer isso, use a função sql:variable .

O valor SQL será mapeado para um valor correspondente XQuery e seu tipo será um tipo base XQuery equivalente ao tipo de SQL correspondente.

Você só pode se referir a uma instância xml no contexto da expressão de origem de uma instrução de inserção XML-DML; caso contrário, você não pode se referir a valores que são do tipo xml ou de um tipo CLR (Common Language Runtime) definido pelo usuário.

Exemplos

R. Usando uma função sql:variable() para levar um valor de variável Transact-SQL para o XML

O exemplo a seguir constrói uma instância XML composta do seguinte:

  • Um valor (ProductID) de uma coluna não XML. A função sql:column() é usada para vincular esse valor no XML.

  • Um valor (ListPrice) de uma coluna não XML em outra tabela. Novamente, sql:column() é usado para associar esse valor no XML.

  • Um valor (DiscountPrice) de uma variável Transact-SQL. O método sql:variable() é usado para associar esse valor ao XML.

  • Um valor (ProductModelName) de uma coluna do tipo xml , para tornar a consulta mais interessante.

Esta é a 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 o seguinte na consulta anterior:

  • O XQuery dentro do método query() constrói o XML.

  • A namespace palavra-chave é usada para definir um prefixo de namespace no XQuery Prolog. Isso é feito porque o valor do atributo ProductModelName é recuperado na coluna de tipo CatalogDescription xml, que tem um esquema associado a ela.

Este é o resultado:

<Product ProductID="771" ProductModelID="19"   
         ProductModelName="Mountain 100"   
         ListPrice="3399.99" DiscountPrice="2500" />  

Confira também

Funções de extensão XQuery do SQL Server
Comparar XML tipado com XML não tipado
Dados XML (SQL Server)
Criar instâncias de dados XML
Métodos de Tipos de Dados XML
Linguagem de modificação de dados XML (XML DML)