Фиксация хранимой процедуры после успешного выполнения команды DELETE и UPDATE - PullRequest
0 голосов
/ 21 января 2020

Это моя хранимая процедура

ALTER Proc [dbo].[DeleteQualityAssemblyProduction]
@id int,
@Quantity int,
@idPartShip int,
@FK_idNextProcess int
AS
DELETE FROM [dbo].DailyQualityAssemblyProduction
  WHERE id=@id
if @FK_idNextProcess=11

Begin
UPDATE [dbo].[ProjectShipping]
SET 
  QualityAssemblyQty = QualityAssemblyQty- @Quantity

WHERE id=@idPartShip
End

Я хочу, чтобы и DELETE, и UPDATE выполнялись успешно. COMMIT, в противном случае ROLLBACK.
Мне было интересно, если добавление COMMIT в конце хранимой процедуры сделает работу или мне нужен другой метод

1 Ответ

1 голос
/ 22 января 2020

Вот один из способов, которым вы могли бы заняться этим. Это добавление транзакции, которая вам потребуется для обработки нескольких операторов DML в одном автономном блоке. Затем добавили попытку / перехват, чтобы в случае сбоя любого оператора транзакция рассматривала оба оператора как одну единицу работы.

ALTER Proc [dbo].[DeleteQualityAssemblyProduction]
(
    @id int,
    @Quantity int,
    @idPartShip int,
    @FK_idNextProcess int
) AS

    set nocount on;
    begin transaction

    begin try

        DELETE FROM [dbo].DailyQualityAssemblyProduction
        WHERE id = @id

        if @FK_idNextProcess = 11
        begin
            UPDATE [dbo].[ProjectShipping]
            SET QualityAssemblyQty = QualityAssemblyQty - @Quantity
            WHERE id = @idPartShip
        end

        commit transaction
    end try

    begin catch
        rollback transaction

        declare @error int
            , @message varchar(4000);

        select @error = ERROR_NUMBER()
            , @message = ERROR_MESSAGE()

        raiserror ('DeleteQualityAssemblyProduction: %d: %s', 16, 1, @error, @message) ;
    end catch
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...