TSQL: ¿Hay alguna forma de limitar las filas devueltas y contar el total que se habría devuelto sin el límite (sin agregarlo a cada fila)?
Estoy trabajando para actualizar un procedimiento almacenado que selecciona actualmente hasta n filas, si las filas devuelven = n, realiza un recuento de selección sin el límite, y luego devuelve la selección original y el total de filas afectadas.
Más o menos como:
SELECT TOP (@rowsToReturn)
A.data1,
A.data2
FROM
mytable A
SET @maxRows = @@ROWCOUNT
IF @rowsToReturn = @@ROWCOUNT
BEGIN
SET @maxRows = (SELECT COUNT(1) FROM mytableA)
END
Quiero reducir esto a una sola declaración de selección. Residencia enesta pregunta, COUNT(*) OVER()
permite esto, pero se coloca en cada fila en lugar de en un parámetro de salida. Tal vez algo comoFOUND_ROWS()
en MYSQL, como @@ TOTALROWCOUNT o tal.
Como nota al margen, dado que la selección real tiene un orden por, la base de datos ya deberá atravesar todo el conjunto (para asegurarse de que obtenga los primeros n registros ordenados correctos), por lo que la base de datos ya debería tener este recuento en alguna parte.