Сравнение операторов XQuery с XML-данными
Применимо к:SQL Server
XQuery поддерживает следующие операторы:
числовые операторы (+, -, *, div, mod);
операторы сравнения значений (eq, ne, lt, gt, le, ge);
Операторы общего сравнения ( =, !=, <, ><=, =, >= )
Дополнительные сведения об этих операторах см. в разделе "Выражения сравнения" (XQuery)
Примеры
О. Использование общих операторов
Этот запрос иллюстрирует использование общих операторов, применяемых к последовательностям, а также при сравнении последовательностей. Запрос получает последовательность телефонных номеров для каждого клиента из столбца AdditionalContactInfo таблицы Contact. Далее эта последовательность сравнивается с последовательностью двух телефонных номеров (111-111-1111, 222-2222).
Запрос использует = оператор сравнения. Каждый узел в последовательности справа = от оператора сравнивается с каждым узлом в последовательности слева. Если узлы совпадают, сравнение узлов равно TRUE. Затем оно конвертируется в тип данных int и сравнивается с 1, а запрос возвращает идентификатор заказчика.
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)
Существует еще один способ узнать, как работает предыдущий запрос: каждое значение номера телефона, полученное из столбца AdditionalContactInfo , сравнивается с набором двух телефонных номеров. Если значение входит в набор, в результате запроса возвращается этот заказчик.
B. Использование числового оператора
Оператор + в данном запросе является оператором значения, так как он применяется к одному объекту. К примеру, значение 1 добавляется к размеру лота, возвращаемому этим запросом.
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. Использование оператора значения
Следующий запрос извлекает <Picture
> элементы для модели продукта, где размер рисунка имеет значение 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
Так как оба операнда для оператора eq являются атомарными значениями, оператор значения используется в запросе. Вы можете написать тот же запрос с помощью общего оператора сравнения ( = ).
См. также
Функции XQuery для типа данных XML
XML-данные (SQL Server)
Справочник по языку XQuery (SQL Server)