Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Gibt zwei Resultsets zurück, wenn WITH TempResults AS verwendet wird

Das geht (soweit ich weiß) nicht. Es gibt drei Problemumgehungen, eine ermöglicht es Ihnen, zwei unterschiedliche Ergebnismengen beizubehalten, und die anderen beiden erfordern das Zusammenführen der Ergebnisse in derselben Ergebnismenge (entweder als zusätzliche Zeile oder als zusätzliche Spalte).

  1. Anstelle eines CTE die Ergebnisse in eine temporäre Tabelle schieben und dann von dieser abfragen.
  2. Fügen Sie die Anzahl als weitere Zeile in die tatsächliche Ergebnismenge ein:Verwenden Sie ein UNION ALL und geben Sie der Zählzeile geeignete Werte für ID, Name und RowID, damit Sie sie aus den restlichen Daten extrahieren können
  3. Fügen Sie SELECT COUNT(*) hinzu in die primäre Ergebnismenge als zusätzliche Spalte mit einem CROSS JOIN oder ähnliches.

Für Letzteres können Sie dies tun, indem Sie Ihre primäre Abfrage ändern 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);

Ich kann nicht für die Leistung bürgen - Sie müssten ein Profil erstellen.