Método consulta() (Tipo de dados xml)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Especifica uma consulta XQuery em instância do tipo de dados xml. O resultado é do tipo xml. O método retorna uma instância de XML sem-tipo.

Sintaxe

query ('XQuery')  

Argumentos

XQuery
É uma cadeia de caracteres, uma expressão XQuery, que consulta nós XML, como elementos e atributos, em uma instância XML.

Exemplos

Esta seção fornece exemplos de uso do método query() do tipo de dados xml.

a. Usando o método query() em relação a uma variável de tipo xml

O exemplo a seguir declara uma variável @myDoc do tipo xml e atribui uma instância XML a essa variável. O método query() é, em seguida, usado para especificar uma consulta XQuery no documento.

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

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')  

A saída a seguir mostra o resultado:

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

B. Usando o método query() em relação a uma coluna do tipo XML

No seguinte exemplo, o método query() é usado para especificar uma consulta XQuery na coluna CatalogDescription do tipo xml no banco 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  

Observe os seguintes itens na consulta anterior:

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

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

  • O método exist() (tipo de dados XML) na cláusula WHERE localiza somente as linhas que contêm o elemento <Warranty> no XML. Novamente, a palavra-chave namespace define dois prefixos de namespace.

A saída a seguir mostra o resultado parcial:

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

Observe que os métodos query() e exist() declaram o prefixo PD. Nesses casos, você 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;

Consulte Também

Adicionar namespaces a consultas com WITH XMLNAMESPACES
Comparar XML tipado 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)