Partilhar via


Vinculando dados relacionais dentro de dados XML

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Pode especificar Métodos de Tipo de Dados xml contra uma variável ou coluna de tipo de dados xml . Por exemplo, o Método Query() (Tipo de Dado xml) executa o XQuery especificado contra uma instância XML. Quando constrói XML desta forma, pode querer trazer um valor de uma coluna não do tipo XML ou de uma variável Transact-SQL. Este processo é referido como ligação de dados relacionais dentro do XML.

Para vincular os dados relacionais não XML dentro do XML, o Motor de Base de Dados SQL Server fornece as seguintes pseudo-funções:

Pode usar estas funções com métodos de tipos de dados XML sempre que quiser expor um valor relacional dentro de XML.

Não pode usar estas funções para referenciar dados em colunas ou variáveis dos tipos xml, CLR definidos pelo utilizador, data-hora, smalldatetime, texto, ntext, sql_variant e tipos de imagem .

Além disso, esta ligação é para fins de apenas leitura. Ou seja, não pode escrever dados em colunas que usem estas funções. Por exemplo, sql:variable("@x")="alguma expressão" não é permitida.

Exemplo: Consulta entre domínios usando sql:variable()

Este exemplo mostra como sql:variable() pode permitir que uma aplicação parametrize uma consulta. O ISBN é transmitido usando uma variável @isbnSQL . Ao substituir a constante por sql:variable(), a consulta pode ser usada para procurar qualquer ISBN e não apenas aquele cujo ISBN é 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() pode ser usado de forma semelhante e oferece benefícios adicionais. Os índices sobre a coluna podem ser usados para eficiência, conforme decidido pelo otimizador de consultas baseado em custos. Além disso, a coluna calculada pode armazenar uma propriedade promovida.

Ver também