Normalmente tengo usp_sp_Name_InsertOrUpdate procedimientos almacenados

Entonces mi estructura es simple como:

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


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

Para reanudar esto, el procedimiento almacenado busca una actualización, si no actualiza nada @@ROWCOUNT == 0, entonces procede a la instrucción INSERT si @ROWCOUNT > 0 simplemente se detiene allí.

Mi pregunta es. Si tengo más de una declaración UPDATE como:

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


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

Si la primera actualización devuelve @@ROWCOUNT > 0 pero la segunda devuelve el procedimiento almacenado 0, continúe con la instrucción INSERT porque @@ROWCOUNT solo detecta la última UPDATE consulta.

¿Hay algún truco para saber si alguna actualización devuelve @@ROWCOUNT > 0 si no es la última?

1
Leon 26 oct. 2019 a las 00:32

1 respuesta

La mejor respuesta

Necesitas algo como esto

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

1
Julian 25 oct. 2019 a las 21:36