Operadores XQuery con el tipo de datos XML

Se aplica a:SQL Server

XQuery admite los operadores siguientes:

  • Operadores numéricos (+, -, *, div, mod)

  • Operadores de comparación de valores (eq, ne, lt, gt, le, ge)

  • Operadores para la comparación general ( =, !=, <, , ><=, >= )

Para obtener más información sobre estos operadores, vea Expresiones de comparación (XQuery)

Ejemplos

A. Utilizar operadores generales

Esta consulta ilustra el uso de operadores generales que se aplican a secuencias y también para comparar secuencias. La consulta recupera una secuencia de números de teléfono para cada cliente de la columna AdditionalContactInfo de la tabla Contact . Después, esta secuencia se compara con la secuencia de dos números de teléfono ("111-111-1111", "222-2222").

La consulta usa el = operador de comparación. Cada nodo de la secuencia del lado derecho del = operador se compara con cada nodo de la secuencia del lado izquierdo. Si los nodos coinciden, la comparación de nodos es TRUE. Después, el valor se convierte a int y se compara con 1, y la consulta devuelve el Id. de cliente.

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)  

Hay otra manera de observar cómo funciona la consulta anterior: cada valor de número de teléfono recuperado de la columna AdditionalContactInfo se compara con el conjunto de dos números de teléfono. Si el valor está en el conjunto, se devuelve ese cliente en el resultado.

B. Utilizar un operador numérico

El operador + de esta consulta es un operador de valor, porque se aplica a un solo elemento. Por ejemplo, el valor 1 se suma a un tamaño de lote devuelto por la consulta:

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. Utilizar un operador de valor

La consulta siguiente recupera los <Picture> elementos de un modelo de producto donde el tamaño de la imagen es "pequeño":

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  

Dado que ambos operandos al operador eq son valores atómicos, el operador value se usa en la consulta. Puede escribir la misma consulta mediante el operador de comparación general ( = ).

Consulte también

Funciones de XQuery con el tipo de datos xml
Datos XML (SQL Server)
Referencia del lenguaje XQuery (SQL Server)