Méthode query() (type de données xml)

 

CETTE RUBRIQUE S’APPLIQUE À :ouiSQL Server (à partir de la version 2008)nonAzure SQL DatabasenonAzure SQL Data WarehousenonParallel Data Warehouse

Spécifie une requête XQuery sur une instance de la xml type de données. Le résultat est de xml type. La méthode renvoie une instance XML non typé.

S’applique à: SQL Server (SQL Server 2008 et version actuelle), Base de données Azure SQL.
  
query ('XQuery')  

XQuery
Expression XQuery de type chaîne, qui interroge les nœuds XML, tels que des éléments ou des attributs, dans une instance XML.

Cette section fournit des exemples d’utilisation de la méthode query() le xml type de données.

A. Utilisation de la méthode query() sur une variable de type xml

L’exemple suivant déclare une variable @myDoc des xml Tapez et lui assigne une instance XML. Le query() méthode est ensuite utilisée pour spécifier une requête XQuery sur le document.

La requête récupère l'élément enfant <Features> provenant de l'élément <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')  

Voici le résultat obtenu :

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

B. Utilisation de la méthode query() sur une colonne de type XML

Dans l’exemple suivant, le query() méthode est utilisée pour spécifier une requête XQuery sur le CatalogDescription colonne de xml type dans le AdventureWorks base de données :

SELECT CatalogDescription.query('  
declare namespace PD="http://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="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
declare namespace wm="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain";  
     /PD:ProductDescription/PD:Features/wm:Warranty ') = 1  

Notez les points suivants dans la requête précédente :

  • La colonne CatalogDescription est typé xml colonne. En d'autres termes, elle possède une collection de schémas qui lui est associée. Dans la prologue XQuery, le espace de noms mot clé est utilisé pour définir le préfixe qui sera utilisé ultérieurement dans le corps de la requête.

  • Le query() méthode construit le document XML, un <Product> élément ayant une ProductModelID attribut, dans lequel le ProductModelID valeur d’attribut est récupérée à partir de la base de données. Pour plus d’informations sur la construction XML, consultez Construction XML &#40 ; XQuery &#41 ;.

  • Le méthode exist() (type de données XML) dans la clause WHERE est utilisée pour rechercher uniquement les lignes contenant le <Warranty> élément dans le document XML. Là encore, le espace de noms mot clé est utilisé pour définir deux préfixes d’espace de noms.

Voici le résultat partiel :

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

Remarque : les méthodes query() et exist() déclarent toutes deux le préfixe PD. Quand de tels cas se présentent, vous pouvez utiliser WITH XMLNAMESPACES pour définir au préalable les préfixes et les utiliser dans la requête.

WITH XMLNAMESPACES (  
   'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS PD,  
   'http://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  

Ajoutez les espaces de noms pour les requêtes avec WITH XMLNAMESPACES
Comparer le type XML au format XML non typé
Créer des Instances de données XML
les méthodes de Type de données XML
XML Data Modification Language &#40 ; XML DML &#41 ;

Ajouts de la communauté

Afficher: