count 関数 (XQuery)

$arg で指定したシーケンスに含まれるアイテムの数を返します。

構文

fn:count($arg as item()*) as xs:integer

引数

  • $arg
    カウントするアイテム。

解説

$arg が空シーケンスの場合、0 を返します。

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

A. count() XQuery 関数を使用して、ある製品モデルを製造するワーク センターの場所の数をカウントする

次のクエリでは、ある製品モデル (ProductModelID=7) の製造プロセスでのワーク センターの場所の数をカウントします。

SELECT Production.ProductModel.ProductModelID, 
       Production.ProductModel.Name, 
       Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
       <NoOfWorkStations>
          { count(/AWMI:root/AWMI:Location) }
       </NoOfWorkStations>
') as WorkCtrCount
FROM Production.ProductModel
WHERE Production.ProductModel.ProductModelID=7

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

  • XQuery プロローグnamespace キーワードで名前空間プレフィックスを定義します。このプレフィックスは XQuery の本文で使用されます。
  • <NoOfWorkStations> 要素を含んだ XML が構成されます。
  • XQuery 本文の count() 関数で <Location> 要素の数をカウントします。

結果を次に示します。

ProductModelID   Name                 WorkCtrCount     
-------------- ---------------------------------------------------
7             HL Touring Frame  <NoOfWorkStations>6</NoOfWorkStations>   

次のクエリで示すように、製品モデルの ID および名前を含むように XML を構成することもできます。

SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
       <NoOfWorkStations
             ProductModelID= "{ sql:column("Production.ProductModel.ProductModelID") }" 
             ProductModelName = "{ sql:column("Production.ProductModel.Name") }" >
          { count(/AWMI:root/AWMI:Location) }
       </NoOfWorkStations>
') as WorkCtrCount
FROM Production.ProductModel
WHERE Production.ProductModel.ProductModelID= 7

結果を次に示します。

<NoOfWorkStations ProductModelID="7" 
                  ProductModelName="HL Touring Frame">6</NoOfWorkStations>

XML 以外にも、次のクエリで示すように xml 以外の型で値を返すことができます。ワーク センターの場所の数を取得するために value() メソッド (xml データ型) を使用しています。

SELECT  ProductModelID, 
        Name, 
        Instructions.value('declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
           count(/AWMI:root/AWMI:Location)', 'int' ) as WorkCtrCount
FROM Production.ProductModel
WHERE ProductModelID=7

結果を次に示します。

ProductModelID    Name            WorkCtrCount
-------------- ---------------------------------
7              HL Touring Frame        6   

参照

関連項目

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

ヘルプおよび情報

SQL Server 2005 の参考資料の入手