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 seguinte exemplo, o método query() é usado para especificar uma consulta XQuery em relação à coluna CatalogDescription do tipo xml no banco de dados AdventureWorks2008R2:
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