query() (método de tipo de datos xml)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Especifica una expresión XQuery en una instancia del tipo de datos xml. El resultado es de tipo xml. El método devuelve una instancia XML sin tipo.

Sintaxis

query ('XQuery')  

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

XQuery
Es una cadena, una expresión XQuery, que consulta nodos XML como, por ejemplo, elementos y atributos, en una instancia XML.

Ejemplos

En esta sección se muestran ejemplos de cómo usar el método query() del tipo de datos xml.

A. Usar el método query() con una variable de tipo xml

En el ejemplo siguiente se declara una variable @myDoc de tipo xml y se le asigna una instancia XML. Luego se usa el método query() para especificar una expresión XQuery en el documento.

La consulta recupera el elemento secundario <Features> del 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')  

La siguiente salida muestra el resultado:

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

B. Usar el método query() con una columna de tipo XML

En el ejemplo siguiente, el método query() se usa para especificar una expresión XQuery en la columna CatalogDescription de tipo xml de la base de datos 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 los siguientes elementos en la consulta anterior:

  • CatalogDescription es una columna xml con tipo, lo que significa que tiene una colección de esquemas asociada con ella. En el Prólogo de XQuery, la palabra clave namespace define el prefijo que se va a usar posteriormente en el cuerpo de la consulta.

  • El método query() crea XML, un elemento <Product> que tiene un atributo ProductModelID, en el que el valor de atributo ProductModelID se recupera a partir de la base de datos. Para obtener más información sobre la creación de XML, consulte Construcción de XML (XQuery).

  • El método exist() (tipo de datos XML) de la cláusula WHERE busca únicamente filas que contienen el elemento <Warranty> en el XML. La palabra clave namespace define de nuevo dos prefijos de espacio de nombres.

La siguiente salida muestra el resultado parcial:

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

Observe que ambos métodos, query() y exist(), declaran el prefijo PD. En estos casos, puede utilizar WITH XMLNAMESPACES para definir los prefijos en primer lugar y utilizarlo en la 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 también

Agregar espacios de nombres a consultas con WITH XMLNAMESPACES
Comparar XML con tipo y XML sin tipo
Crear instancias de datos XML
Métodos del tipo de datos xml
Lenguaje de manipulación de datos XML (XML DML)