Как откат транзакции в TS'L при усечении данных строки?

В настоящее время у меня есть большой процесс импорта, что я пытаюсь обернуть внутри сделки, так что если что-нибудь перерывы - я мог бы откат. Вопрос у меня есть в том, что, когда TS'L внутри транс взрывается, он не будет отката, когда следующая ошибка S'L происходит

Msg 8152, Level 16, State 14, Line 249
String or binary data would be truncated.
The statement has been terminated.

Ниже обертывания этого импорта TS'L

DECLARE @error INT
SELECT @error = 0
BEGIN TRANSACTION

--** begin import TSQL

--** end import TSQL

SELECT @error = @@error 
IF @error != 0 GOTO handle_error

COMMIT

handle_error: 
IF @error != 0 
BEGIN 
ROLLBACK 
END

Ответ на: "Как откат транзакции в TS'L при усечении данных строки?"

Количество ответов:3

Как насчет включения xact_abort

set xact_abort on

Если ваш на S'L 2005 вы можете попробовать:

BEGIN TRANSACTION
BEGIN TRY
    --Run your Statements
    COMMIT TRANSACTION
END TRY
BEGIN CATCH
        ROLLBACK TRANSACTION
        DECLARE @Msg NVARCHAR(MAX)  
        SELECT @Msg=ERROR_MESSAGE() 
        RAISERROR('Error Occured: %s', 20, 101,@msg) WITH LOG
END CATCH

Я хотел бы также отметить, что если вы получаете эту ошибку часто, вам нужно пересмотреть размер столбца вы вводите данные или настроить процесс очистки для подготовки данных, прежде чем положить его в таблицу prod. В SSIS можно также иметь данные, которые deosn't соответствовать стандартному размеру, переходят в плохую таблицу данных, а остальное обрабатывают.