/ / ¿Hay alguna forma de calcular el número total de filas que regresan de la consulta dinámica en Expresión de tabla común (CTE) o Subconsulta - sql, sql-server, sql-server-2008, tsql?

¿Hay alguna forma de calcular el número total de filas que se devuelven de la consulta dinámica en Expresión de tabla común (CTE) o subconsulta - sql, sql-server, sql-server-2008, tsql?

Estamos en el proceso de optimizar nuestra base de datos.Tenemos la mayoría de los procedimientos de la tienda que utilizan CTE porque nos proporciona un alto rendimiento de acuerdo con nuestra estructura de tablas. Tenemos consultas casi dinámicas que tienen diferentes resultados según diferentes condiciones. Mantenemos todos los datos en CTE y verificamos la condición. problema, pero necesitamos el número total de filas que devuelve cada consulta, para calcular esto lleva mucho tiempo. Tabla temporal o variable de tabla no adecuada en nuestro caso, ya que lleva mucho tiempo insertar datos en ella. Tenemos la siguiente estructura

With t(fields) as
(select field1,field2.......
ROW_NUMBER() OVER (order by some column) as row...
from some table and lots of
inner n left joins
where some condition ),
rowTotal(RowTotal) as
(select max(row) from t)
select * from t,RowTotal
where condition for paging

Pero max (fila) tomó muchas veces si quito estodevuelve datos dentro de 100ms. Intenté Coun (*), Count (SomeField) y muchos otros, pero me tomó mucho tiempo. ¿Cómo puedo lograr el número total de filas de cte dentro de algunos ms cualquier función agregada no funcionará para mí? ¿Hay alguna otra manera de calcule rowtotal como @@ rowcount. Gracias de antemano por cualquier ayuda.

Respuestas

1 para la respuesta № 1

Si busca el número total de filas de la consulta interna, puede agregar esto como una columna a su selección usando COUNT() y PARTITION BY().

With t(fields) as
(select COUNT(*) OVER (PARTITION BY 1) AS TotalRows,
field1,field2.......
ROW_NUMBER() OVER (order by some column) as row...
from some table ...

Esto debería darle un recuento del total de filas en "t" como la primera columna de t

No sé que esta es la forma más rápida de obtener el resultado que desea, pero funciona para mí en miles de registros devueltos y evita consultas de selección extra para encontrar el recuento por separado.