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
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 de tourner xact_abort
set xact_abort on
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.