次の方法で共有


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

適用対象: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> 要素が含まれていない製品モデルを<検索します。

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

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

  • 次に、クエリによって、 要素とその ProductModelID 属性を<Product>含む 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 Prologdeclarenamespace は、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()*型、または空のシーケンスの引数のみをサポートします。

参照

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