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)