針對 xml 資料類型的 XQuery 運算子
XQuery 支援下列運算子:
數值運算子 (+, -, *, div, mod)
用於值比較的運算子 (eq, ne, lt, gt, le, ge)
用於一般比較的運算子 ( =, !=, <, >, <=, >= )
如需有關這些運算子的詳細資訊,請參閱<比較運算式 (XQuery)>
範例
A.使用一般運算子
此查詢會說明套用到序列與比較序列的一般運算子使用方式。 查詢會從 Contact 資料表的 AdditionalContactInfo 資料行,擷取一連串的客戶電話號碼。 然後,將此序列和這兩個電話號碼的序列 ("111-111-1111", "222-2222") 比較。
此查詢使用 = 比較運算子。 在 = 運算子右側序列中的每個節點,會和左側序列中的每個節點進行比較。 如果節點相符,節點比較就是 TRUE。 接著會轉換為整數並和 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.使用值運算子
下列查詢會為圖形大小為 "small" 的產品型號擷取 <Picture> 元素:
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 運算子的兩個運算元都是不可部分完成的值,所以查詢中使用值運算子。 您可以使用一般比較運算子 ( = ) 撰寫相同的查詢。