Função count (XQuery)

Retorna o número de itens que estão contidos na sequência especificada por $arg.

Sintaxe

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

Argumentos

  • $arg
    Itens a serem contados.

Comentários

Retornará 0 se $arg for uma sequência vazia.

Exemplos

Este tópico fornece exemplos de XQuery em instâncias XML armazenadas em várias colunas do tipo xml no banco de dados AdventureWorks2008R2. Para obter uma visão geral de cada uma dessas colunas, consulte Representação de tipo de dados xml no banco de dados do AdventureWorks2008R2.

A. Usando a função count() XQuery para contar o número de locais de centro de trabalho na fabricação de um modelo de produto

A consulta a seguir conta o número de locais de centro de trabalho no processo de fabricação de um modelo de produto (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;

Observe o seguinte na consulta anterior:

  • A palavra-chave namespace em Prólogo do XQuery define um prefixo de namespace. O prefixo é então usado no corpo do XQuery.

  • A consulta constrói XML que inclui o elemento <NoOfWorkStations>.

  • A função count() no corpo do XQuery conta o número de elementos <Location>.

Este é o resultado:

ProductModelID Name WorkCtrCount

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

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

Você também pode construir o XML para incluir o nome e a ID do modelo do produto, como mostrado na seguinte consulta:

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;

Este é o resultado:

<NoOfWorkStations ProductModelID="7"

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

Em vez de XML, você pode retornar esses valores como tipo não xml, como mostrado na consulta a seguir. A consulta usa o método value() (tipo de dados xml) para recuperar a contagem de local do centro de trabalho.

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;

Este é o resultado:

ProductModelID Name WorkCtrCount

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

7 HL Touring Frame 6

Consulte também

Referência