Partilhar via


Método Query() (Tipo de Dados xml)

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

Especifica um XQuery contra uma instância do tipo de dado xml . O resultado é do tipo xml . O método devolve uma instância de XML não tipado.

Sintaxe

query ('XQuery')  

Arguments

XQuery
É uma string, uma expressão XQuery, que consulta nós XML, como elementos e atributos, numa instância XML.

Examples

Esta secção fornece exemplos de utilização do método query() do tipo de dado xml .

A. Usar o método query() contra uma variável do tipo xml

O exemplo seguinte declara uma variável @myDoc do tipo xml e atribui-lhe uma instância XML. O método query() é então usado para especificar um XQuery contra o documento.

A consulta recupera o <Features> elemento filho do <ProductDescription> elemento:

DECLARE @myDoc XML  
SET @myDoc = '<Root>  
<ProductDescription ProductID="1" ProductName="Road Bike">  
<Features>  
  <Warranty>1 year parts and labor</Warranty>  
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>  
</Features>  
</ProductDescription>  
</Root>'  
SELECT @myDoc.query('/Root/ProductDescription/Features')  

O resultado seguinte mostra o resultado:

<Features>  
  <Warranty>1 year parts and labor</Warranty>  
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>  
</Features>        

B. Usar o método query() contra uma coluna de tipo XML

No exemplo seguinte, o método query() é usado para especificar um XQuery contra a coluna CatalogDescription do tipo xml na base de dados AdventureWorks :

SELECT CatalogDescription.query('  
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
<Product ProductModelID="{ /PD:ProductDescription[1]/@ProductModelID }" />  
') as Result  
FROM Production.ProductModel  
where CatalogDescription.exist('  
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
declare namespace wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain";  
     /PD:ProductDescription/PD:Features/wm:Warranty ') = 1  

Note os seguintes elementos da consulta anterior:

  • A coluna CatalogDescription é uma coluna xml tipada, o que significa que tem uma coleção de esquemas associada. No prólogo XQuery, a palavra-chave do namespace define o prefixo que é posteriormente usado no corpo da consulta.

  • O método query() constrói XML, um <Product> elemento que tem um atributo ProductModelID , no qual o valor do atributo ProductModelID é recuperado da base de dados. Para mais informações sobre construção XML, consulte XML Construction (XQuery).

  • O método exist() (tipo de dado XML) na cláusula WHERE encontra apenas linhas que contêm o <Warranty> elemento no XML. Mais uma vez, a palavra-chave namespace define dois prefixos de namespace.

O resultado seguinte mostra o resultado parcial:

<Product ProductModelID="19"/>   
<Product ProductModelID="23"/>   
...  

Note que os métodos query() e exist() declaram ambos o prefixo PD. Nestes casos, pode usar WITH XMLNAMESPACES para definir primeiro os prefixos e usá-los na consulta.

WITH XMLNAMESPACES 
(  
   'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS PD,  
   'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS WM
)  
SELECT CatalogDescription.query('<Product ProductModelID="{ /PD:ProductDescription[1]/@ProductModelID }" />')
       AS Result  
FROM Production.ProductModel  
WHERE CatalogDescription.exist('/PD:ProductDescription/PD:Features/WM:Warranty ') = 1;

Ver também

Adicionar namespaces a consultas com WITH XMLNAMESPACES
Comparar XML digitado com XML não tipado
Criar instâncias de dados XML
Métodos de Tipos de Dados XML
Linguagem de Modificação de Dados XML (XML DML)