Wie kann ich eine Transaktion in TSQL zurücksetzen, wenn Zeichenfolgendaten abgeschnitten werden?

Derzeit habe ich einen großen Importprozess, den ich versuche, in eine Transaktion zu wickeln, also wenn etwas bricht - ich könnte Rollback. Das Problem, das ich habe, ist, dass, wenn die TSQL innerhalb der Trans explodiert, wird es nicht Rollback, wenn der folgende SQL-Fehler auftritt

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

Die unten umschließt diesen Import TSQL

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

Antwort auf "Wie kann ich eine Transaktion in TSQL zurücksetzen, wenn Zeichenfolgendaten abgeschnitten werden? " 3 von antworten

Wie wäre es mit dem Einschalten von xact_abort

set xact_abort on

Wenn Sie auf SQL 2005 können Sie versuchen:

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

Ich möchte auch darauf hinweisen, dass, wenn Sie diesen Fehler häufig erhalten, Sie die Größe der Spalte, in die Sie Daten eingeben, überarbeiten oder Ihren Reinigungsprozess anpassen müssen, um die Daten vorzubereiten, bevor Sie sie in die Prod-Tabelle einfügen. In SSIS können Sie auch die Daten, die die Standardgröße nicht erfüllen, an eine fehlerhafte Datentabelle gehen lassen und den Rest verarbeiten.