Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Restituisce due set di risultati quando si utilizza WITH TempResults AS

Questo non può essere fatto (per quanto ne so). Esistono tre soluzioni alternative, una che ti consente di mantenere due set di risultati distinti e le altre due che richiedono l'unione dei risultati nello stesso set di risultati (come riga o colonna aggiuntiva).

  1. Invece di un CTE, inserisci i risultati in una tabella temporanea, quindi esegui una query da quella.
  2. Unisci il conteggio nel set di risultati effettivo come un'altra riga:usa un UNION ALL e dai alla riga di conteggio valori adatti per ID, Nome e RowID in modo da poterlo estrarre dal resto dei dati
  3. Aggiungi il SELECT COUNT(*) nel set di risultati primario come colonna extra con un CROSS JOIN o simili.

Per quest'ultimo, puoi farlo cambiando la tua query principale in:

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

Non posso garantire la performance:dovresti creare un profilo.