Isso não pode ser feito (até onde eu sei). Há três soluções alternativas, uma que permite manter dois conjuntos de resultados distintos e as outras duas que exigem mesclar os resultados no mesmo conjunto de resultados (como uma linha extra ou uma coluna extra).
- Em vez de uma CTE, envie os resultados para uma tabela temporária e faça uma consulta a partir dela.
- Mescle a contagem no conjunto de resultados real como outra linha:use um
UNION ALL
e dê à linha de contagem valores adequados para ID, Nome e RowID para que você possa extraí-lo do restante dos dados - Adicione o
SELECT COUNT(*)
no resultado primário definido como uma coluna extra com umCROSS JOIN
ou similar.
Para este último, você pode fazer isso alterando sua consulta primária para:
SELECT Id, Name, RowId, countTable.totalRows
FROM ResultsTemp
CROSS JOIN (SELECT COUNT(*) AS totalRows FROM ResultsTemp) AS countTable
GROUP BY Id, Name, RowId
HAVING RowId BETWEEN @StartRow and (@StartRow + @MaxRows);
Eu não posso garantir o desempenho - você precisa de perfil.