Запись статуса транзакции фиксация / откат - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть несколько операторов delete, которые будут выглядеть так, как я написал ниже.Тем не менее, я хочу записать row_count для каждой удаляемой таблицы, а также статус транзакции.Как получить, если удаление в транзакции завершено успешно или нет, и записать это в Delete_Log_table, что у меня есть.Кроме того, что, если удаление не удастся, мне придется остановить удаление вперед.

Пожалуйста, помогите:

BEGIN TRANSACTION 

DELETE FROM [DB].[SCHEMA].[EXAMPLE_TABLE]
WHERE MY_ID IN (SELECT MY_ID FROM #TEMP_TABLE)

COMMIT TRANSACTION

INSERT INTO [DELETE_LOG_TABLE] 
(TABLE_NAME, ROW_COUNT_DELETED, STATUS_OF_TRANSACTION, LOAD_DATE)
('EXAMPLE_TABLE',@@ROWCOUNT, 'HOW DO I GET COMMIT/ROLLBACK HERE- HELP', GETDATE())

1 Ответ

0 голосов
/ 30 ноября 2018

вам нужно использовать TRY и CATCH для того, что вам нужно.Вот ваш пример:

BEGIN TRY
    BEGIN TRANSACTION 

    DELETE FROM [DB].[SCHEMA].[EXAMPLE_TABLE]
    WHERE MY_ID IN (SELECT MY_ID FROM #TEMP_TABLE)

    INSERT INTO [DELETE_LOG_TABLE] 
    (TABLE_NAME, ROW_COUNT_DELETED, STATUS_OF_TRANSACTION, LOAD_DATE)
    ('EXAMPLE_TABLE',@@ROWCOUNT, 'Successful', GETDATE())

    COMMIT TRANSACTION

END TRY
BEGIN CATCH

    INSERT INTO [DELETE_LOG_TABLE] 
    (TABLE_NAME, ROW_COUNT_DELETED, STATUS_OF_TRANSACTION, LOAD_DATE)
    ('EXAMPLE_TABLE',0, 'Error. Detail is :'+ERROR_MESSAGE(), GETDATE())


    ROLLBACK TRANSACTION
END CATCH
...