not 関数 (XQuery)

$arg の有効なブール値が偽である場合には、TRUE を返します。また、$arg の有効なブール値が真である場合には、FALSE を返します。

構文

fn:not($arg as item()*) as xs:boolean

引数

  • $arg
    有効なブール値が指定されているアイテムのシーケンス。

このトピックでは、AdventureWorks データベースのさまざまな xml 型列に格納される XML インスタンスに対する XQuery の例について説明します。これらの各列の概要については、「AdventureWorks データベースの xml データ型表現」を参照してください。

A. not() XQuery 関数を使用して、カタログの説明に <Specifications> 要素が含まれていない製品モデルを検索する

次のクエリを使用して、カタログの説明に <Specifications> 要素が含まれていない製品モデルの製品モデル ID を含む XML を作成します。

WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd)
SELECT ProductModelID, CatalogDescription.query('
       <Product 
           ProductModelID="{ sql:column("ProductModelID") }"
        />
') as Result
FROM Production.ProductModel
WHERE CatalogDescription.exist('
     /pd:ProductDescription[not(pd:Specifications/*)]  '
     ) = 0

上のクエリに関して、次の点に注意してください。

  • このドキュメントは名前空間を使用しているため、サンプルでは WITH NAMESPACES ステートメントを使用しています。もう 1 つの方法として、XQuery プロローグdeclare namespace キーワードを使用することもできます。

  • <Product> 要素、およびその製品の ProductModelID 属性を含んだ XML が構成されます。

  • WHERE 句では、exist() method (XML data type) を使用して行をフィルタで選択します。<Specification> 子要素を持たない <ProductDescription> 要素がある場合、exist() メソッドは True を返します。not() 関数が使用されていることに注意してください。

製品モデルのカタログの各説明に <Specifications> 要素が含まれているため、この結果セットは空です。

B. not() XQuery 関数を使用して、MachineHours 属性を持たないワーク センターの場所を取得する

次のクエリは、Instructions 列に対して指定されています。この列には、製品モデルの製造手順が格納されています。

特定の製品モデルでは、MachineHours を指定しないワーク センターの場所がクエリによって取得されます。つまり、MachineHours 属性は、<Location> 要素に対して指定されません。

SELECT ProductModelID, Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" ;
     for $i in /AWMI:root/AWMI:Location[not(@MachineHours)]
     return
       <Location LocationID="{ $i/@LocationID }" 
                   LaborHrs="{ $i/@LaborHours }" >
        </Location>
') as Result
FROM Production.ProductModel
WHERE ProductModelID=7 

上のクエリに関して、次の点に注意してください。

  • XQuery プロローグdeclare namespace では、Adventure Works の製造手順の名前空間プレフィックスが定義されています。この定義は、製造手順ドキュメントで使用されているのと同じ名前空間を表しています。

  • このクエリでは、MachineHours 属性がない場合、not(@MachineHours) 述語が True を返します。

結果を次に示します。

ProductModelID Result 
-------------- --------------------------------------------
7              <Location LocationID="30" LaborHrs="1"/>
               <Location LocationID="50" LaborHrs="3"/>
               <Location LocationID="60" LaborHrs="4"/>

実装の制限事項

制限事項を次に示します。

  • not() 関数によってサポートされている引数は、xs:boolean 型、node()*、または空のシーケンスだけです。