量化式 (XQuery)
適用対象:SQL Server
存在量化子と全称量化子により、2 つのシーケンスに適用されるブール演算子に異なるセマンティクスが指定されます。 これを次の表に示します。
存在量化子
2 つのシーケンスを指定すると、最初のシーケンス内の項目が、使用されている比較演算子に基づいて 2 番目のシーケンスで一致する場合、戻り値は True になります。
ユニバーサル量指定子
2 つのシーケンスがあるときに、最初のシーケンスのすべてのアイテムが 2 番目のシーケンスと一致する場合、True が返されます。
XQuery では、次の形式で定量化された式がサポートされています。
( some | every ) <variable> in <Expression> (,...) satisfies <Expression>
これらの式をクエリで使用すると、1 つまたは複数のシーケンスに対して、存在または普遍的な定量化を式に明示的に適用できます。 SQL Serverでは、 句のsatisfies
式は、ノード シーケンス、空のシーケンス、またはブール値のいずれかになります。 この式の結果の有効なブール値が、量化に使用されます。 量指定子によってバインドされた値の少なくとも 1 つが True の結果を満たす式の場合、 一部 を使用する実存定量では True が返されます。 すべての を使用する汎用定量化では、量指定子によってバインドされているすべての値に対して 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>
次のクエリに示すように、 query() メソッドを使用する代わりに 、value() メソッド を使用して結果をリレーショナルワールドに返すことができます。 すべてのワーク センターの場所に 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 にサイズの小さい写真が少なくとも 1 枚含まれているようにすることができます。 これを行うには、次のクエリを実行します。
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
実装の制限事項
制限事項は次のとおりです。
- 量化式の変数をバインドする操作の一部として、型のアサーションはサポートされません。