SQL Server - транзакции откатывают на ошибке?

Вы могли записать пользовательский интерфейс IComparer в вид датой создания, и затем передать его для Выстраивания. Вид. Вы, вероятно, также хотите посмотреть на StrCmpLogical, который является тем, что используется, чтобы сделать использование Проводника сортировки (сортирующий числа правильно с текстом).

181
задан marc_s 17 November 2009 в 06:10
поделиться

3 ответа

Вы можете указать установить xact_abort на перед транзакцией, чтобы гарантировать автоматический откат sql в случае ошибки.

190
ответ дан 23 November 2019 в 06:08
поделиться

Вы правы в том, что вся транзакция будет отменена. Вы должны ввести команду для отката.

Вы можете заключить это в блок TRY CATCH следующим образом

BEGIN TRY
    BEGIN TRANSACTION

        INSERT INTO myTable (myColumns ...) VALUES (myValues ...);
        INSERT INTO myTable (myColumns ...) VALUES (myValues ...);
        INSERT INTO myTable (myColumns ...) VALUES (myValues ...);

    COMMIT TRAN -- Transaction Success!
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0
        ROLLBACK TRAN --RollBack in case of Error

    -- you can Raise ERROR with RAISEERROR() Statement including the details of the exception
    RAISERROR(ERROR_MESSAGE(), ERROR_SEVERITY(), 1)
END CATCH
184
ответ дан 23 November 2019 в 06:08
поделиться

Если одна из вставок завершилась неудачно или какая-либо часть команды завершилась неудачно, SQL-сервер откатит транзакцию?

Нет, не откатывается.

Если не откатывается , мне нужно отправить вторую команду для отката?

Конечно, вы должны выполнить ROLLBACK вместо COMMIT .

Если вы хотите решить, следует ли выполнять фиксацию или откатить транзакцию, вы должны удалить предложение COMMIT из оператора, проверить результаты вставок и затем выполнить либо COMMIT , либо ROLLBACK в зависимости от результаты проверки.

10
ответ дан 23 November 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: