对于INSERT
,UPDATE
并DELETE
直接对数据库执行SQL语句,大多数数据库提供商返回受影响的行数。对于存储过程,受影响的记录数始终为-1
。
如何获得受存储过程影响的记录数?
Answers:
@@RowCount
将为您提供受SQL语句影响的记录数。
@@RowCount
仅当您之后立即发布时,该作品才有效。因此,如果要捕获错误,则必须在同一行上执行。如果将其拆分,您将错过第二名。
SELECT @NumRowsChanged = @@ROWCOUNT, @ErrorCode = @@ERROR
如果有多个语句,则必须捕获每个语句受影响的行数并将其累加起来。
SELECT @NumRowsChanged = @NumRowsChanged + @@ROWCOUNT, @ErrorCode = @@ERROR
对我来说,它SET NOCOUNT ON
是在存储过程脚本中设置的(默认在SQL Server Management Studio中),并且SqlCommand.ExecuteNonQuery();
始终返回-1。
我只是将其关闭:SET NOCOUNT OFF
无需使用@@ROWCOUNT
。
在此处找到更多详细信息:SqlCommand.ExecuteNonQuery()在执行插入/更新/删除时返回-1
警告:如果要更改的表已附加触发器,则@@ROWCOUNT
可能返回假数据!
在@@ROWCOUNT
返回的受动了扳机,而不是实际的语句记录数!