I SQL Server 2008 och senare, lägg till COUNT(*)
OVER ()
som ett av kolumnnamnen i din fråga och som kommer att fyllas i med det totala antalet returnerade rader.
Det upprepas på varje enskild rad men åtminstone värdet är tillgängligt.
Anledningen till att många andra lösningar inte fungerar är att för mycket stora resultatuppsättningar kommer du inte att veta totalen förrän efter att ha itererat alla rader, vilket inte är praktiskt i många fall (särskilt sekventiell bearbetningslösning). Denna teknik ger dig det totala antalet efter att ha anropat den första IDataReader.Read()
, till exempel.
select COUNT(*) OVER () as Total_Rows, ... from ...