потому что это if @i=0
устанавливает его в 0, даже оператор печати установит его в 0
теперь запустите это
declare @i int, @RowNum int
set @i=0
while @i<2
begin
if @i=0
begin
execute StoredProcedure @i --containing a big select
set @RowNum=@@rowcount
end
else
execute StoredProcedure @i
set @i=@i+1
end
print @RowNum
вот еще один пример
select 1
union all
select 2
select @@rowcount --2
go
сейчас будет 0
select 1
union all
select 2
if 1=1
select @@rowcount --0
ПЕЧАТЬ также испортила, это будет 2
select 1
union all
select 2
select @@rowcount --2
go
это будет 0
select 1
union all
select 2
print '1'
select @@rowcount -- 0
Я создал пост с большим количеством примеров и объяснений здесь: Когда вы должны хранить @@ ROWCOUNT в переменной?