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

Returner to resultatsæt, når du bruger WITH TempResults AS

Dette kan ikke lade sig gøre (så vidt jeg ved). Der er tre løsninger, en som giver dig mulighed for at beholde som to adskilte resultatsæt, og de to andre som kræver at resultaterne flettes ind i det samme resultatsæt (som enten en ekstra række eller en ekstra kolonne).

  1. I stedet for en CTE skal du skubbe resultaterne ind i en midlertidig tabel og derefter forespørge fra den.
  2. Flet optællingen ind i det faktiske resultatsæt som en anden række:brug en UNION ALL og giv optællingsrækken passende værdier for ID, Navn og RowID, så du kan udtrække det fra resten af ​​dataene
  3. Tilføj SELECT COUNT(*) ind i det primære resultatsæt som en ekstra kolonne med en CROSS JOIN eller lignende.

For sidstnævnte kan du gøre det ved at ændre din primære forespørgsel til:

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

Jeg kan ikke stå inde for præstationen - du skal profilere dig.



  1. TableView rediger kolonne JAVA FX

  2. Sådan konverteres indlejret hierarki af xml til sql-tabel

  3. Hvordan hjælper parameteriserede forespørgsler mod SQL-injektion?

  4. Ændring af en tabelkolonne for at acceptere flere tegn