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

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 Expressions de comparaison (XQuery).

Exemples

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 colonne AdditionalContactInfo de la table Person. 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 l'opérateur de comparaison =. Chaque nœud de la séquence situé à droite de l'opérateur = est comparé à chaque nœud de la séquence situé à gauche de l'opérateur. 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 (
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo' AS ACI,
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes' AS ACT)
SELECT BusinessEntityID 
FROM   Person.Person
WHERE  AdditionalContactInfo.value('
      //ACI:AdditionalContactInfo//ACT:telephoneNumber/ACT:number = 
          ("111-111-1111", "222-2222")',
      'bit')= cast(1 as bit);

Il existe une autre méthode pour observer le fonctionnement de la requête précédente : chaque valeur du numéro de téléphone du téléphone récupérée de la colonne AdditionalContactInfo est comparée avec le jeu 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="https://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="https://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;

Les opérandes de l'opérateur eq étant des valeurs atomiques, l'opérateur de valeur est utilisé dans la requête. Vous pouvez écrire la même requête en utilisant l'opérateur de comparaison générale ( = ).