web-dev-qa-db-fra.com

Comment annuler une transaction dans TSQL lorsque les données de chaîne sont tronquées?

Actuellement, j'ai un processus d'importation important que j'essaie d'envelopper dans une transaction, donc si quelque chose se casse - je pourrais retourner. Le problème que j'ai est que lorsque le TSQL à l'intérieur du transparent, il ne remplacera pas lorsque l'erreur SQL suivante se produit.

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

La ci-dessous enveloppe cette importation 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
32
Toran Billups

Si vous êtes sur SQL 2005, vous pouvez essayer:

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
80
JoshBerke

Que diriez-vous de tourner xact_abort

set xact_abort on
20
Sung M. Kim

Je voudrais également souligner que si vous recevez cette erreur souvent, vous devez réviser la taille de la colonne dans laquelle vous entrez des données dans ou ajustez votre processus de nettoyage pour préparer les données avant de la mettre dans la table Prod. Dans la SSIS, vous pouvez également avoir les données que les dessinés ne répondent pas à la taille standard se rendent à une mauvaise table de données et à traiter le reste.

0
HLGEM