量化表示式 (XQuery)
適用於:SQL Server
存在和通用數量值會為套用至兩個序列的布爾運算子指定不同的語意。 下表顯示此專案。
存在數量值
假設有兩個序列,如果第一個序列中的任何專案在第二個序列中有相符專案,則根據使用的比較運算符,傳回的值為 True。
通用數量值
假設有兩個序列,如果第一個序列中的每個專案在第二個序列中都有相符專案,則傳回的值為 True。
XQuery 支援以下列形式量化的表示式:
( some | every ) <variable> in <Expression> (,...) satisfies <Expression>
您可以在查詢中使用這些表達式,明確地將存在或通用量化套用至一或多個序列上的表達式。 在 SQL Server 中 satisfies
,子句中的運算式必須產生下列其中一項:節點序列、空序列或布爾值。 該表達式結果的有效布爾值將會用於數量。 如果數量值所系結的至少一個值在滿足表達式中產生 True,則使用 某些 值的存在數量值會傳回 True。 針對數量值所系結的所有值,使用 every 的 通用數量值都必須有 True。
例如,下列查詢會檢查每個 <Location> 元素,以查看它是否有 LocationID 屬性。
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
if (every $WC in //AWMI:root/AWMI:Location
satisfies $WC/@LocationID)
then
<Result>All work centers have workcenterLocation ID</Result>
else
<Result>Not all work centers have workcenterLocation ID</Result>
') as Result
FROM Production.ProductModel
where ProductModelID=7
因為 LocationID 是 Location> 元素的必要屬性<,所以您會收到預期的結果:
<Result>All work centers have Location ID</Result>
您可以使用 value() 方法將結果傳回關係型世界,而不是使用 query() 方法,如下列查詢所示。 如果所有工作中心位置都有LocationID屬性,查詢會傳回True。 否則,查詢會傳回 False。
SELECT Instructions.value('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
every $WC in //AWMI:root/AWMI:Location
satisfies $WC/@LocationID',
'nvarchar(10)') as Result
FROM Production.ProductModel
where ProductModelID=7
下列查詢會檢查其中一張產品圖片是否很小。 在產品目錄 XML 中,會針對不同大小的每個產品圖片儲存各種角度。 您可能想要確保每個產品目錄 XML 至少包含一張小型圖片。 下列查詢會完成這項作業:
SELECT ProductModelID, CatalogDescription.value('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
some $F in /PD:ProductDescription/PD:Picture
satisfies $F/PD:Size="small"', 'nvarchar(20)') as SmallPicturesStored
FROM Production.ProductModel
WHERE ProductModelID = 19
這是部分結果:
ProductModelID SmallPicturesStored
-------------- --------------------
19 true
實作限制
以下是限制:
- 在量化表達式中系結變數時,不支援類型判斷提示。