Comment annuler une transaction dans TSQL lorsque datatables de string sont tronquées?

Actuellement, j'ai un process d'import important que j'essaie d'enrouler dans une transaction, donc si quelque chose se brise, je peux revenir en arrière. Le problème que j'ai, c'est que lorsque le TSQL à l'intérieur du trans augmente, il ne reviendra pas lorsque l'erreur SQL suivante se produit

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

Le ci-dessous encapsule cette 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 

    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 

    Que diriez-vous d' activer xact_abort

     set xact_abort on 

    Je voudrais également souligner que si vous recevez souvent cette erreur, vous devez réviser la taille de la colonne dans laquelle vous entrez des données ou ajuster votre process de nettoyage pour préparer datatables avant de les placer dans la table prod. Dans SSIS, vous pouvez également faire en sorte que datatables qui ne correspondent pas à la taille standard soient placées dans une mauvaise table de données et traitent le rest.