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)
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente las Cuestiones de GitHub como mecanismo de retroalimentación para el contenido y lo sustituiremos por un nuevo sistema de retroalimentación. Para más información, consulta:Enviar y ver comentarios de