Используйте @@ RowCount для нескольких обновлений - PullRequest
0 голосов
/ 26 октября 2019

Обычно у меня есть 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 ...

Если первое обновление возвращает @@ROWCOUNT > 0, а второе возвращает 0, хранимая процедура продолжается с оператором INSERT, поскольку @@ROWCOUNT обнаруживает только последнееUPDATE запрос.

Есть ли хитрость, чтобы узнать, возвращает ли какое-либо обновление @@ROWCOUNT > 0, если оно не последнее?

1 Ответ

0 голосов
/ 26 октября 2019

Вам нужно что-то вроде этого

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

...