Função count (XQuery)
Retorna o número de itens que estão contidos na seqüê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 seqüê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 AdventureWorks. Para obter uma visão geral de cada uma dessas colunas, consulte Representação de tipo de dados xml no banco de dados do AdventureWorks.
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