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