获取Sqlserver上一句语句执行后受影响的行数@@rowCount

时间:2021-11-03 04:07:54

from:http://blog.163.com/rihui_7/blog/static/212285143201381343240404/

返回受上一语句影响的行数。 ROWCOUNT_BIG." xmlspace="preserve" style="line-height: 22.75px;">如果行数大于 20 亿,请使用 ROWCOUNT_BIG

获取Sqlserver上一句语句执行后受影响的行数@@rowCount Transact-SQL 语法约定

@@ROWCOUNT 

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

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

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

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

执行简单分配的语句始终将 @@ROWCOUNT 值设置为 1。 不将任何行发送到客户端。 'Generic Text'." xmlspace="preserve" style="line-height: 22.75px;">这些语句的示例如下: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。

以下示例执行 UPDATE 语句并使用 @@ROWCOUNT 来检测是否更改了任何一些行。

USE AdventureWorks2012; GO UPDATE HumanResources.Employee  SET JobTitle = N'Executive' WHERE NationalIDNumber = 123456789 IF @@ROWCOUNT = 0 PRINT 'Warning: No rows were updated'; GO

返回上一语句受影响的行数!和@ERROR一样的特性,在每一条语句执行后都将被重置,如果将来使用需要将变量保存到局部变量中。任何不返回的语句都将这个变量置为0!比如经常使用的IF语句。废话少说,上代码!
DECLARE @RowCountVar INT
Update AF_CarOil SET OilType = '五号汽油'--执行后@@ROWCOUNT为2
SET @RowCountVar = @@ROWCOUNT --执行后@@ROWCOUNT为1
IF @@ROWCOUNT = 1  --执行后@@ROWCOUNT为0
BEGIN
    PRINT '影响的行数为1'
PRINT @@ROWCOUNT
END
IF @RowCountVar <> 0
BEGIN
    PRINT '受影响的行数为:' + STR(@RowCountVar)
END
-----------------------------------------------------------------
 
(2 行受影响)
影响的行数为 1
受影响的行数为:        2
分析:上面的代码中在执行Update语句之后,受影响的行数为2行,然后将受影响的行数保存到事先声明的局部变量中,赋值语句实际上影响的行数为1行,在下面的IF语句中进行了跳转,这个地方是关键,这并不是Update语句受影响的行数是1,而是将@@ROWCOUNT将的赋给局部变量的过程中变成了1。在执行后IF @@ROWCOUNT = 1的判断之后@@ROWCOUNT的数值重新被赋值为了0!