为什么我不能获得@@ rowcount值?

时间:2010-08-26 14:02:30

标签: sql sql-server sql-server-2000 rowcount

下面是我拥有的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

3 个答案:

答案 0 :(得分:13)

因为if @i=0

将其设置为0,即使print语句也将其设置为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

我在这里创建了一篇包含更多示例和解释的帖子:When should you store @@ROWCOUNT into a variable?

答案 1 :(得分:0)

我会假设SQLMenace的答案是正确的,但补充说,“这不是你想做的吗?”:

    declare @RowNum int 
    execute StoredProcedure 0
    set @RowNum=@@rowcount 
    execute StoredProcedure 1 
    print @RowNum 

答案 2 :(得分:0)

我会避免这种风格。如果通过在调用过程之后查询@@ rowcount来检索从SP中的表中选择的行数,则实际上是对内部实现过程的方式引入了不必要的依赖性并损害了显式性。如果您以后更改过程的实现,它可能会破坏外部代码,并且在修改SP时不会显而易见。您应该使用适当命名的输出参数。