Método consulta() (Tipo de dados xml)
Aplica-se a: SQL ServerBanco 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')
Observação
Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.
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)
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de