下面是我拥有的 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
下面是我拥有的 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
因为这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
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
我一般会避免这种风格。如果您在调用过程后通过查询@@rowcount 来检索从SP 中的表中选择的行数,您实际上是在引入对内部如何实现过程的不必要的依赖并损害显式性。如果您稍后更改过程的实现,它可能会破坏外部代码,并且在修改 SP 时不会很明显。您应该改用适当命名的输出参数。