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.

Respuestas a la pregunta(4)

Su respuesta a la pregunta