Ниже представлена упрощенная версия имеющегося у меня сценария SQL. print @RowNum
всегда показывает 0, а не реальный номер записи первого набора результатов. В чем дело? Спасибо.
declare @i int, @RowNum int
set @i=0
while @i<2
begin
execute StoredProcedure @i --containing a big select
if @i=0 set @RowNum=@@rowcount
set @i=@i+1
end
print @RowNum
потому что это если @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
PRINT тоже портит результат, это будет 2
select 1
union all
select 2
select @@rowcount --2
go
это будет 0
select 1
union all
select 2
print '1'
select @@rowcount -- 0
Я создал пост с дополнительными примерами и пояснениями здесь: Когда вы должны хранить @@ROWCOUNT в переменной?
Я предполагаю, что ответ SQLMenace правильный, но добавлю: "Разве это не сделает то, что вы хотите?":
declare @RowNum int
execute StoredProcedure 0
set @RowNum=@@rowcount
execute StoredProcedure 1
print @RowNum