@@rowcount 种种小问题

yidichaxiang 2010-11-25 09:50:54

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE ReturnEffectRows
@selfid int
AS
BEGIN
SET NOCOUNT OFF;

declare @num int

Update tableName SET columnName=Value
where selfid=@selfid

if @@rowcount>0
set @num=@@rowcount;
else
set @num=-1;

return @num;
END



结果发现 当有记录被修改时返回的值不是预期的【1】而是【0】,没有记录被更改时返回值是预期的【-1】

查 SQL Server 帮助

@@rowcount 返回受上一语句影响的行数

测试代码:

1 select * from bggl_bzjcb
2 print @@rowcount
3 print @@rowcount
4 print @@rowcount


(1 行受影响)
1
0
0

分析 第2行的@@rowcount 返回的是第1行代码影响的行数
第3行的@@rowcount 返回的是第2行代码影响的行数
第4行的@@rowcount 返回的是第3行代码影响的行数

测试:

select * from bggl_bzjcb
print @@rowcount
select @@rowcount
print @@rowcount


declare @num int
select * from bggl_bzjcb
if @@rowcount>0
set @num=@@rowcount;
else
set @num=-1;

print @num


select * from bggl_bzjcb
while @@rowcount>0
print @@rowcount;




(1 行受影响)
1

(1 行受影响)
1

(1 行受影响)
0

(1 行受影响)
0

分析: @@rowcount 返回受上一语句(最小语句执行单位)影响的行数(包括显示的 select @@rowcount)
...全文
130 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yidichaxiang 2010-11-25
  • 打赏
  • 举报
回复
回复 确实没认真看帮助
[Quote=引用 1 楼 chuifengde 的回复:]

你没认真看帮助:
@@ROWCOUNT
返回受上一语句影响的行数。

语法
@@ROWCOUNT

返回类型
integer

注释
任何不返回行的语句将这一变量设置为 0 ,如 IF 语句。
[/Quote]


Transact-SQL 语句可以通过下列方式设置 @@ROWCOUNT 的值:

将 @@ROWCOUNT 设置为受影响或被读取的行的数目。可以将行发送到客户端,也可以不发送。


保留前一个语句执行中的 @@ROWCOUNT。


将 @@ROWCOUNT 重置为 0 但不将该值返回到客户端。


执行简单分配的语句始终将 @@ROWCOUNT 值设置为 1。不将任何行发送到客户端。这些语句的示例如下:SET @local_variable、RETURN、READTEXT 以及不带查询Select 语句,如 SELECT GETDATE() 或 SELECT 'Generic Text'。

在查询中执行分配或使用 RETURN 的语句将 @@ROWCOUNT 值设置为受查询影响或由查询读取的行数,例如:SELECT @local_variable = c1 FROM t1。

数据操作语言 (DML) 语句将 @@ROWCOUNT 值设置为受查询影响的行数,并将该值返回到客户端。DML 语句不会将任何行发送到客户端。

DECLARE CURSOR 和 FETCH 将 @@ROWCOUNT 值设置为 1。

EXECUTE 语句保留前一个 @@ROWCOUNT。

USE、SET <option>、DEALLOCATE CURSOR、CLOSE CURSOR、BEGIN TRANSACTION 或 COMMIT TRANSACTION 等语句将 ROWCOUNT 值重置为 0。
abuying 2010-11-25
  • 打赏
  • 举报
回复
其实@@rowcount是个系统变量,经常变化的,反复调用会失效的.
它只是返回受上一语句影响的行数.上一行不管是什么语句,
可以使用变量接收,存起来!
同@@error
rucypli 2010-11-25
  • 打赏
  • 举报
回复
你分析的没问题呀
chuifengde 2010-11-25
  • 打赏
  • 举报
回复
如果要在影响的行数之后引用这个@@rowcount要将它先保留在一个变量中再使用(它是时常变化的)
xiaoxiangqing 2010-11-25
  • 打赏
  • 举报
回复
不会有问题呀,我一直这样用都是好好的。
chuifengde 2010-11-25
  • 打赏
  • 举报
回复
你没认真看帮助:
@@ROWCOUNT
返回受上一语句影响的行数。

语法
@@ROWCOUNT

返回类型
integer

注释
任何不返回行的语句将这一变量设置为 0 ,如 IF 语句。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧