Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a: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 do XML, você pode usar essa função ao usar métodos de tipo de dados XML para expor um valor relacional dentro do XQuery.
Por exemplo, o método query() é usado para especificar uma consulta em relação a 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 Transact-SQL, ou parâmetro, para reunir dados relacionais e XML. Para fazer isso, use a função sql:variable.
O valor SQL será mapeado para um valor XQuery correspondente e seu tipo será um tipo base XQuery equivalente ao tipo SQL correspondente.
Você só pode fazer referência a uma instância de xml no contexto da expressão de origem de uma instrução XML-DML insert; caso contrário, não será possível fazer referência a valores do tipo xml ou um tipo definido pelo usuário CLR (Common Language Runtime).
Exemplos
Um. Usando a função sql:variable() para trazer um valor de variável Transact-SQL para XML
O exemplo a seguir constrói uma instância XML que compõe o 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 de outra tabela. Novamente,sql:column()é usado para vincular esse valor no XML.Um valor (
DiscountPrice) de uma variável Transact-SQL. O métodosql:variable()é usado para vincular esse valor ao XML.Um valor (
ProductModelName) de uma coluna xml type, 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 da consulta anterior:
O XQuery dentro do método
query()constrói o XML.A palavra-chave
namespaceé usada para definir um prefixo de namespace no XQuery Prolog. Isso é feito porque o valor do atributoProductModelNameé recuperado da colunaCatalogDescription xmltype, que tem um esquema associado a ela.
Este é o resultado:
<Product ProductID="771" ProductModelID="19"
ProductModelName="Mountain 100"
ListPrice="3399.99" DiscountPrice="2500" />
Ver também
Funções de extensão XQuery do SQL Server
Comparar XML digitado com XML não tipado
dados XML (SQL Server)
Criar instâncias de dados XML
métodos de tipo de dados xml
XML DML (XML Data Modification Language)