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

Especifica uma consulta XQuery em relação a uma 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() é usado para especificar uma consulta XQuery em relação ao 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')

Este é 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 exemplo a seguir, o método query() é usado para especificar uma consulta XQuery em relação à 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 o seguinte na consulta anterior:

  • A coluna CatalogDescription é uma coluna xml digitada. Isso significa que ela possui uma coleção de esquema associada. No Prólogo do XQuery, a palavra-chave namespace é usada para definir o prefixo que é posteriormente usado 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, consulte Construção XML (XQuery).

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

Este é o resultado parcial:

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

Observe que os métodos query() e exist() devem declarar 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

Conceitos

Adicionar namespaces a consultas com WITH XMLNAMESPACES

Comparar XML digitado com XML não digitado

Criar instâncias de dados XML

Linguagem de modificação de dados XML (XML DML)

Outros recursos

Métodos de tipo de dados xml