切换导航
简历
工具
演示
查询
导航菜单
服务端
30
前端
114
数据库
82
进阶开发
8
桌面程序
2
QA
15
软件使用
36
规范协议
5
操作系统
11
AI
0
复用资源
6
硬件
0
标签
SQL Server
Redis
MySQL
其它
Oracle
外部链接
.NET Core SDK和运行时安装包
淘宝 NPM 镜像
查询网
Tables Generator线上表格转换工具
引用cdn在线脚本和样式
首页
数据库
SQL Server T-SQL 系统函数
[TOC] ## 1. @@ROWCOUNT 返回受上一语句影响的行数。这里所说的受影响行数不只是新增/修改/删除这些更改数据的操作,还包括了查询结果的行数,如果行数大于 20 亿,请使用 ROWCOUNT_BIG **说明:**@@ROWCOUNT 只会记录上一条语句影响的行数,并不会累计,只要在 @@ROWCOUNT 之前有语句执行了,@@ROWCOUNT 就会刷新,即便是 @@ROWCOUNT 之前执行的也是 @@ROWCOUNT ,后面的 @@ROWCOUNT 也是返回上一条 @@ROWCOUNT 相关影响行数 > **适用于:**SQL Server Azure SQL、数据库 Azure SQL 托管实例 ### 1.1. 语法 ```SQL @@ROWCOUNT ``` **参数:**无 **返回结果:**返回的结果是一个INT类型,结果是上一条SQL语句影响了多少条记录行数 ```SQL INSERT INTO Customer (Name, Age) VALUES ('曹操', 52), ('曹植', 22) SELECT @@ROWCOUNT -- 上一条语句新增了两条记录,因此结果为 2 UPDATE Customer SET Name = '曹孟德' WHERE Id = 10 SELECT @@ROWCOUNT -- 上一条语句更新了一条记录,因此结果为 1 SELECT * FROM Customer WHERE Id < 10 SELECT @@ROWCOUNT -- 假设上一条语句查询到5条,那么结果为 5,@@ROWCOUNT 在查询语句之后,这里 @@ROWCOUNT 返回的是实际查询到的数量,和语句写法并没有关系 SELECT @@ROWCOUNT -- 结果为 1,上一条语句虽然也是 @@ROWCOUNT,但它查询的到的结果是一行数据,因此这里返回的就是 1 ``` ### 1.2. 注解 Transact-SQL 语句可以通过以下方式设置值 @@ROWCOUNT : + 设置为 @@ROWCOUNT 受影响或读取的行数。 行可能或可能不会发送到客户端。 + 保留 @@ROWCOUNT 上一语句执行。 + 重置 @@ROWCOUNT 为 0,但不将值返回到客户端。 使简单赋值始终设置为@@ROWCOUNT1的语句。 不将任何行发送到客户端。 这些语句的示例包括: `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 CURSORPRINT`、`RAISERROR`、、或`BEGIN TRANSACTION`将`COMMIT TRANSACTION`值重置为0等ROWCOUNT语句。 本机编译的存储过程保留以前的 @@ROWCOUNT存储过程。 本机编译存储过程内的 Transact-SQL 语句未设置 @@ROWCOUNT。 有关详细信息,请参阅本机编译的存储过程。 ## 2. @@ERROR ### 2.1. 使用@@ERROR存在的问题 @@ERROR可以捕捉执行的错误码,但是需要注意错误后如果再执行其他语句@@ERROR会被重置了(任何语句都会重置,包括IF判断语句执行后也会重置,例如下面的例子就是不赋值@error只要继续执行下去@@ERROR就会重置为0) ```SQL DECLARE @num INT, @error INT = 0; SET @num = 2 / 0; SET @error = @@ERROR; --执行后@@ERROR为8134 IF @@ERROR = 0 BEGIN PRINT @error; PRINT @@ERROR; --因为出错后有执行的其它语句@@ERROR会重新变为0所以进入这段代码了 END; ELSE BEGIN PRINT @error; END; ``` ## 参考 >** 微软文档:** [@@ROWCOUNT (Transact-SQL)](https://learn.microsoft.com/zh-cn/sql/t-sql/functions/rowcount-transact-sql?view=sql-server-ver16) [@@ERROR (Transact-SQL)](https://learn.microsoft.com/zh-cn/sql/t-sql/functions/error-transact-sql?view=sql-server-ver16)
扫一扫手机看
点击排行
windows 文件资源管理器使用
Layui 弹窗open使用说明
SQL Server 中字符串函数使用
C# 使用QQ邮箱代理做邮件接收功能
SQL Server关于apply的两种形式cross apply 和 outer apply
ASP.NET MVC 模型的自定义验证
nvm安装及常用命令
SQL Server 中数据类型转换
SQL Server 中WITH AS短语的使用
IE浏览器下AJAX缓存问题导致数据不更新的解决办法
订阅号