次の方法で共有


ブール値に対する関数 - 機能しない

適用対象: SQL Server

$argの有効なブール値が false の場合は TRUE を返し、$argの有効なブール値が true の場合は FALSE を返します。

構文

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

引数

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

このトピックでは、AdventureWorks データベースのさまざまな xml 型の列に格納されている XML インスタンスに対する XQuery の例を示します。

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 Prologdeclare namespace キーワードを使用してプレフィックスを定義することです。

  • 次に、 <Product> 要素とその ProductModelID 属性を含む XML が作成されます。

  • WHERE 句では、 exist() メソッド (XML データ型) を使用して行をフィルター処理します。 exist() メソッドは、<Specification>子要素を持たない<ProductDescription>要素がある場合に 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 Prolog のdeclarenamespace Adventure Works 製造命令名前空間プレフィックスを定義します。 この定義は、製造手順ドキュメントで使用されているのと同じ名前空間を表しています。

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

結果を次に示します。

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

実装の制限事項

制限事項は次のとおりです。

  • not()関数は、xs:boolean 型、node()* 型、または空のシーケンスの引数のみをサポートします。

参照

xml データ型に対する XQuery 関数