首页 文章

如何获取受存储过程影响的记录数?

提问于
浏览
80

对于 INSERT ,直接对数据库执行 UPDATEDELETE SQL语句,大多数数据库提供商返回受影响的行数 . 对于存储过程,受影响的记录数始终为 -1 .

我们如何获得受存储过程影响的记录数?

6 回答

  • 42

    警告:如果要更改的表格附有 triggers@@ROWCOUNT 可能会返回 bogus 数据!

    @@ROWCOUNT 将返回受TRIGGER影响的记录数,而不是实际的声明!

  • 28
  • -1

    原来的我, SET NOCOUNT ON 在存储过程脚本(默认情况下,SQL Server Management Studio中)设置和 SqlCommand.ExecuteNonQuery(); 总是返回-1 .

    我只是把它关掉: SET NOCOUNT OFF 而不需要使用 @@ROWCOUNT .

    更多细节在这里:SqlCommand.ExecuteNonQuery() returns -1 when doing Insert / Update / Delete

  • 76

    @@RowCount 将为您提供受SQL语句影响的记录数 .

    @@RowCount 仅在您之后立即发布时才有效 . 因此,如果您正在捕获错误,则必须在同一行上执行此操作 . 如果你把它拆开,你会错过你放在第二位的那个 .

    SELECT @NumRowsChanged = @@ROWCOUNT, @ErrorCode = @@ERROR
    

    如果您有多个语句,则必须捕获每个语句受影响的行数并将其添加 .

    SELECT @NumRowsChanged = @NumRowsChanged  + @@ROWCOUNT, @ErrorCode = @@ERROR
    
  • 4

    对于Microsoft SQL Server,您可以返回 @@ROWCOUNT 变量以返回受存储过程中最后一个语句影响的行数 .

  • 8

    注册存储过程的out参数,如果使用SQL Server,则根据 @@ROWCOUNT 设置值 . 如果您使用的是Oracle,请使用 SQL%ROWCOUNT .

    请注意,如果您有多个 INSERT/UPDATE/DELETE ,则需要一个变量来存储每个操作的 @@ROWCOUNT 结果 .

相关问题