如何获取受存储过程影响的logging数?
对于直接针对数据库执行的INSERT
, UPDATE
和DELETE
SQL语句,大多数数据库提供程序返回受影响的行数。 对于存储过程,受影响的logging数始终为-1
。
我们如何获得受存储过程影响的logging数?
注册存储过程的out参数,如果使用SQL Server,则基于@@ ROWCOUNT设置值。 如果您使用的是Oracle,请使用SQL%ROWCOUNT。
请注意,如果您有多个INSERT / UPDATE / DELETE,则需要一个variables来存储@@ ROWCOUNT对每个操作的结果。
@@RowCount
会给你一个SQL语句影响的logging数。
@@RowCount
只有在您之后立即发布时才有效。 所以,如果你陷阱错误,你必须在同一条线上。 如果你把它分开,你会错过任何一个你放在第二位。
SELECT @NumRowsChanged = @@ROWCOUNT, @ErrorCode = @@ERROR
如果您有多个语句,则必须捕获每个语句受影响的行数并将其添加。
SELECT @NumRowsChanged = @NumRowsChanged + @@ROWCOUNT, @ErrorCode = @@ERROR
对我来说SET NOCOUNT ON
在存储过程脚本(默认在SQL Server Management Studio)和SqlCommand.ExecuteNonQuery();
总是返回-1。
我只是把它closures: SET NOCOUNT OFF
不需要使用@@ROWCOUNT
。
在这里find更多的细节: SqlCommand.ExecuteNonQuery()做插入/更新/删除时返回-1
对于Microsoft SQL Server,可以返回@@ ROWCOUNTvariables以返回存储过程中最后一条语句影响的行数。
@@ ROWCOUNT
警告: @@ROWCOUNT
可能会返回虚假的数据,如果表被更改的触发器连接到它!
@@ROWCOUNT
将返回受TRIGGER影响的logging数,而不是实际的语句!