針對 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 運算子的兩個運算元都是不可部分完成的值,所以查詢中使用值運算子。您可以使用一般比較運算子 ( = ) 撰寫相同的查詢。