針對 xml 資料類型的 XQuery 運算子
適用於:SQL Server
XQuery 支援下列運算子:
數值運算子(+、-、*、div、mod)
值比較的運算子(eq、ne、lt、gt、le、ge)
一般比較的運算子 (=、!=、、 <> 、 < =、 > = )
如需這些運算子的詳細資訊,請參閱 比較運算式 (XQuery)
範例
A. 使用一般運算子
此查詢說明使用套用至序列的一般運算子,以及比較序列。 查詢會從 Contact 資料表的 AdditionalContactInfo 資料行擷取每位客戶的電話號碼序列。 然後,這個序列與兩個電話號碼的序列進行比較(「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 運算子的運算元 都是不可部分完成的值,因此值運算子會用於查詢中。 您可以使用一般比較運算子 () 來撰寫相同的查詢。 =
另請參閱
針對 xml 資料類型的 XQuery 函式
XML 資料 (SQL Server)
Xquery 語言參考 (SQL Server)
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應