Opérateurs XQuery sur le type de données xmlXQuery Operators Against the xml Data Type

CETTE RUBRIQUE S’APPLIQUE À : ouiSQL Server (à partir de la version 2012)nonAzure SQL DatabasenonAzure SQL Data WarehousenonParallel Data Warehouse 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 :XQuery supports the following operators:

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

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

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

    Pour plus d’informations sur ces opérateurs, consultez Expressions de comparaison ( XQuery )For more information about these operators, see Comparison Expressions (XQuery)

ExemplesExamples

A.A. Utilisation d'opérateurs générauxUsing general operators

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.The query illustrates the use of general operators that apply to sequences, and also to compare sequences. 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.The query retrieves a sequence of telephone numbers for each customer from the AdditionalContactInfo column of the 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").This sequence is then compared with the sequence of two telephone numbers ("111-111-1111", "222-2222").

La requête utilise le = opérateur de comparaison.The query uses the = comparison operator. Chaque nœud de la séquence situé à droite de la = opérateur est comparée à chaque nœud de la séquence situé à gauche.Each node in the sequence on the right side of the = operator is compared with each node in the sequence on the left side. Si les nœuds correspondent, la comparaison de nœud est TRUE.If the nodes match, the node comparison is TRUE. Elle est ensuite convertie en int et comparée à 1, puis la requête retourne l'ID de client.It is then converted to an int and compared with 1, and the query returns the customer ID.

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 un autre moyen d’observer le fonctionne 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.There is another way to observe how the previous query works: Each phone telephone number value retrieved from the AdditionalContactInfo column is compared with the set of two telephone numbers. Si la valeur se trouve dans le jeu, le client correspondant est retourné dans le résultat.If the value is in the set, that customer is returned in the result.

B.B. Utilisation d'un opérateur numériqueUsing a numeric operator

L'opérateur + de cette requête est un opérateur de valeur, car il s'applique à un seul élément.The + operator in this query is a value operator, because it applies to a single item. Par exemple, la valeur 1 est ajoutée à une taille de lot retournée par la requête :For example, value 1 is added to a lot size that is returned by the query:

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.C. Utilisation d'un opérateur de valeurUsing a value operator

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 » :The following query retrieves the <Picture> elements for a product model where the picture size is "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.Because both the operands to the eq operator are atomic values, the value operator is used in the query. Vous pouvez écrire la même requête en utilisant l’opérateur de comparaison générale ( = ).You can write the same query by using the general comparison operator ( = ).

Voir aussiSee Also

Fonctions XQuery impliquant le Type de données xml XQuery Functions against the xml Data Type
Données XML (SQL Server) XML Data (SQL Server)
Références relatives au langage Xquery (SQL Server)XQuery Language Reference (SQL Server)