sql >> Base de Datos >  >> RDS >> Sqlserver

Devuelve dos conjuntos de resultados cuando se usa CON TempResults AS

Esto no se puede hacer (que yo sepa). Hay tres soluciones alternativas, una que le permite mantener como dos conjuntos de resultados distintos y las otras dos que requieren fusionar los resultados en el mismo conjunto de resultados (ya sea como una fila adicional o una columna adicional).

  1. En lugar de un CTE, inserte los resultados en una tabla temporal y luego consulte desde allí.
  2. Fusione el conteo en el conjunto de resultados real como otra fila:use UNION ALL y asigne a la fila de conteo valores adecuados para ID, Nombre e ID de fila para que pueda extraerlo del resto de los datos
  3. Agregue SELECT COUNT(*) en el conjunto de resultados principal como una columna adicional con CROSS JOIN o similar.

Para esto último, puede hacerlo cambiando su consulta principal a:

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);

No puedo responder por el rendimiento, tendrías que crear un perfil.