Count 函数 (XQuery)

返回 $arg 指定的序列中所包含的项数。

语法

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

参数

  • $arg
    要计数的项。

注释

如果 $arg 是空序列,则返回 0。

示例

本主题提供了一些对 XML 实例的 XQuery 示例,这些实例存储在 AdventureWorks2008R2 数据库内不同的 xml 类型列中。有关这些列的概述,请参阅AdventureWorks2008R2 数据库中的 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 Prolog 中的 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