Opérateurs XQuery sur le type de données xml

 

S’applique à : SQL Server

THIS TOPIC APPLIES TO: yesSQL Server (starting with 2012)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

XQuery prend en charge les opérateurs suivants :

  • Opérateurs numériques (+, -, *, div, mod)

  • Opérateurs de comparaison de valeurs (eq, ne, lt, gt, le, ge)

  • Opérateurs de comparaison générale ( =, !=, <, >, <=, >= )

Pour plus d’informations sur ces opérateurs, consultez la page des Expressions de comparaison (XQuery)

A. Utilisation d'opérateurs généraux

La requête illustre l'utilisation d'opérateurs généraux qui s'appliquent à des séquences et qui comparent également des séquences. La requête récupère une séquence de numéros de téléphone pour chaque client à partir de la AdditionalContactInfo colonne de la Contact table. Cette séquence est ensuite comparée à la séquence de deux numéros de téléphone ("111-111-1111", "222-2222").

La requête utilise le = opérateur de comparaison. Chaque nœud de la séquence sur le côté droit de la = opérateur est comparée à chaque nœud de la séquence sur le côté gauche. Si les nœuds correspondent, la comparaison de nœud est TRUE. Elle est ensuite convertie en int et comparée à 1, puis la requête retourne l'ID de client.

WITH XMLNAMESPACES (  
'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo' AS ACI,  
'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes' AS ACT)  
SELECT ContactID   
FROM   Person.Contact  
WHERE  AdditionalContactInfo.value('  
      //ACI:AdditionalContactInfo//ACT:telephoneNumber/ACT:number =   
          ("111-111-1111", "222-2222")',  
      'bit')= cast(1 as bit)  

Il existe une autre façon d’observer le fonctionnement de la requête précédente : chaque valeur numéro de téléphone téléphone récupérée à partir du AdditionalContactInfo colonne est comparée à l’ensemble de deux numéros de téléphone. Si la valeur se trouve dans le jeu, le client correspondant est retourné dans le résultat.

B. Utilisation d'un opérateur numérique

L'opérateur + de cette requête est un opérateur de valeur, car il s'applique à un seul élément. Par exemple, la valeur 1 est ajoutée à une taille de lot retournée par la requête :

SELECT ProductModelID, Instructions.query('  
     declare namespace   
 AWMI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";  
     for $i in (/AWMI:root/AWMI:Location)[1]  
     return   
       <Location LocationID="{ ($i/@LocationID) }"  
                   LotSize  = "{  number($i/@LotSize) }"  
                   LotSize2 = "{ number($i/@LotSize) + 1 }"  
                   LotSize3 = "{ number($i/@LotSize) + 2 }" >  
  
       </Location>  
') as Result  
FROM Production.ProductModel  
where ProductModelID=7  

C. Utilisation d'un opérateur de valeur

La requête suivante récupère les éléments <Picture> pour un modèle de produit pour lequel la taille d'image est « small » :

SELECT CatalogDescription.query('  
     declare namespace PD="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
     for $P in /PD:ProductDescription/PD:Picture[PD:Size eq "small"]  
     return  
           $P  
    ') as Result  
FROM Production.ProductModel  
where ProductModelID=19  

Étant donné que les opérandes de le eq opérateur sont des valeurs atomiques, l’opérateur de valeur est utilisée dans la requête. Vous pouvez écrire la même requête à l’aide de l’opérateur de comparaison générale ( = ).

Fonctions XQuery sur le Type de données xml
Données XML (SQL Server)
Référence du langage XQuery (SQL Server)

Ajouts de la communauté

AJOUTER
Afficher: