count (XQuery)

Возвращает количество элементов, содержащихся в последовательности, указываемой аргументом $arg.

Синтаксис

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

Аргументы

  • $arg
    Подсчитываемые элементы.

Замечания

Возвращает 0, если $arg — пустая последовательность.

Примеры

В этом разделе представлены примеры XQuery-запросов к экземплярам XML-данных, хранящимся в различных столбцах типа xml в базе данных База данных AdventureWorks2008R2. Обзор каждого из этих столбцов см. в разделе Представление типов данных XML в базе данных AdventureWorks2008R2.

А. Использование функции XQuery count() для подсчета количества различных географических расположений цехов, участвующих в производстве определенной модели продукта

Следующий запрос подсчитывает количество цехов, участвующих в производстве продукта определенной модели (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;

В приведенном запросе обратите внимание на следующие моменты.

  • Ключевое слово namespace в прологе XQuery определяет префикс пространства имен. Затем этот префикс используется в теле запроса XQuery.

  • Запрос создает XML, включающий элемент <NoOfWorkStations>.

  • Функция count() в тексте запроса XQuery подсчитывает количество элементов <Location>.

Результат:

ProductModelID Name WorkCtrCount

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

7 HL Touring Frame <NoOfWorkStations>6</NoOfWorkStations>

Можно также создать 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, как показано в следующем запросе. Запрос использует метод 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

См. также

Справочник