count (función de XQuery)
Devuelve el número de elementos incluidos en la secuencia especificada por $arg.
Sintaxis
fn:count($arg as item()*) as xs:integer
Argumentos
- $arg
Elementos que se deben contar.
Comentarios
Devuelve 0 si $arg es una secuencia vacía.
Ejemplos
En este tema se ofrecen ejemplos de XQuery con instancias XML almacenadas en varias columnas de tipo xml en la base de datos AdventureWorks2008R2. Para obtener información general de cada una de estas columnas, vea Representación de tipo de datos xml en la base de datos AdventureWorks2008R2.
A. Utilizar la función count() de XQuery para contar el número de centros de trabajo en la fabricación de un modelo de producto
La consulta siguiente cuenta el número de centros de trabajo que participan en el proceso de fabricación de un modelo de producto (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 lo siguiente en la consulta anterior:
La palabra clave namespace del prólogo de consultas XQuery define un prefijo de espacio de nombres. A continuación, el prefijo se utiliza en el cuerpo de XQuery.
La consulta construye una instancia XML que incluye el elemento <NoOfWorkStations>.
La función count() del cuerpo de XQuery cuenta el número de elementos <Location>.
Este es el resultado:
ProductModelID Name WorkCtrCount
-------------- ---------------------------------------------------
7 HL Touring Frame <NoOfWorkStations>6</NoOfWorkStations>
También puede generar la instancia XML para que incluya el identificador y el nombre del modelo de producto, tal y como se muestra en la consulta siguiente:
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 es el resultado:
<NoOfWorkStations ProductModelID="7"
ProductModelName="HL Touring Frame">6</NoOfWorkStations>
En lugar de la instancia XML, puede devolver estos valores con un tipo distinto de xml, tal y como se muestra en la consulta siguiente. La consulta utiliza el método value() del tipo de datos xml para recuperar el recuento de centros de trabajo.
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 es el resultado:
ProductModelID Name WorkCtrCount
-------------- ---------------------------------
7 HL Touring Frame 6