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 Contact. 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 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 un autre moyen d'observer le fonctionnement de la requête précédente : Chaque valeur de numéro de téléphone récupérée dans la colonne AdditionalContactInfo est comparée au 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 ( = ).
Voir aussi