Aquí podría ser tu PUBLICIDAD


¿Cómo revertir una transacción en TSQL cuando se truncan los datos de cadena?

votos
32

Actualmente tengo un gran proceso de importación que estoy tratando de envolver dentro de una transacción, así que si algo se rompe, podría deshacer. El problema que tengo es que cuando el TSQL dentro de la trans explota, no retrocederá cuando ocurra el siguiente error de SQL

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

A continuación, se incluye esta importación de 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
Publicado el 12/03/2009 a las 16:43
fuente por usuario Toran Billups
En otros idiomas...        العربية       

3 respuestas

votos
79

Si estás en SQL 2005 puedes probar:

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
Respondida el 12/03/2009 a las 04:53
fuente por usuario JoshBerke


Aquí podría ser tu PUBLICIDAD


votos
20

¿Qué hay de encender xact_abort

set xact_abort on
Respondida el 12/03/2009 a las 04:45
fuente por usuario Sung

votos
0

También quisiera señalar que si recibe este error con frecuencia, necesita revisar el tamaño de la columna en la que está ingresando los datos o ajustar su proceso de limpieza para preparar los datos antes de colocarlos en la tabla de prod. En SSIS, también puede hacer que los datos que no cumplen con el tamaño estándar vayan a una tabla de datos incorrecta y procesen el resto.

Respondida el 12/03/2009 a las 08:24
fuente por usuario HLGEM