empty 関数 (XQuery)

$arg の値が空のシーケンスの場合に True を返します。それ以外の場合は False を返します。

構文

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

引数

  • $arg
    アイテムのシーケンス。シーケンスが空の場合、関数は True を返します。それ以外の場合は False を返します。

説明

fn:exists() 関数はサポートされません。代わりに、not() 関数を使用できます。

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

A. empty() XQuery 関数を使用した属性の有無の判断

次のクエリは、Product Model 7 の製造プロセスで、MachineHours 属性を持たないすべてのワーク センターの場所を返します。

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

次に結果を示します。

ProductModelID Result

-------------- ------------------------------------------

7 <Location LocationID="30" LaborHrs="1"/>

<Location LocationID="50" LaborHrs="3"/>

<Location LocationID="60" LaborHrs="4"/>

次のクエリは、少し変更が加えられ、MachineHour 属性がない場合に "NotFound" を返します。

SELECT ProductModelID, Instructions.query('
declare namespace p14="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
     for $i in /p14:root/p14:Location
     return
       <Location
            LocationID="{ ($i/@LocationID) }"
            LaborHrs="{ ($i/@LaborHours) }" >
            { 
                 if (empty($i/@MachineHours)) then
                    attribute MachineHours { "NotFound" }
                 else
                    attribute MachineHours { data($i/@MachineHours) }
            }  
       </Location>
') as Result
FROM Production.ProductModel
where ProductModelID=7;

次に結果を示します。

ProductModelID Result

-------------- -----------------------------------

7

<Location LocationID="10" LaborHrs="2.5" MachineHours="3"/>

<Location LocationID="20" LaborHrs="1.75" MachineHours="2"/>

<Location LocationID="30" LaborHrs="1" MachineHours="NotFound"/>

<Location LocationID="45" LaborHrs="0.5" MachineHours="0.65"/>

<Location LocationID="50" LaborHrs="3" MachineHours="NotFound"/>

<Location LocationID="60" LaborHrs="4" MachineHours="NotFound"/>