使用@@RowCount 进行多次更新

Use @@RowCount for multiple updates

通常我有 usp_sp_Name_InsertOrUpdate 个存储过程

所以我的结构很简单:

UPDATE [TableName]
     SET [Column] = @NewValue
     WHERE ...


    IF @@ROWCOUNT = 0
    BEGIN
      INSERT INTO [TableName] ...
    END

要恢复此操作,存储过程会查找更新,如果它没有更新任何内容 @@ROWCOUNT == 0,那么它会继续执行 INSERT 语句,如果 @ROWCOUNT > 0 就停在那里。

我的问题是。如果我有多个 UPDATE 语句,例如:

UPDATE [TableName]
         SET [Column] = @NewValue
         WHERE ...


    UPDATE [AnotherTableName]
         SET [Column] = @NewValue
         WHERE ...

如果第一个更新 returns @@ROWCOUNT > 0 但第二个 return 0 存储过程继续 INSERT 语句,因为 @@ROWCOUNT 只检测最后 UPDATE 查询。

是否有一些技巧可以知道是否有任何更新 return @@ROWCOUNT > 0 如果它不是最后一个?

你需要这样的东西

DECLARE @OLD_ROWCOUNT int; 

UPDATE [TableName]
         SET [Column] = @NewValue
         WHERE ...

SET @OLD_ROWCOUNT = @@ROWCOUNT  -- capture after the first UPDATE

    UPDATE [AnotherTableName]
         SET [Column] = @NewValue
         WHERE ...

-- now you could use @@OLD_ROWCOUNT