Bonjour,
je vous présente le contexte du problème :
Je dois migrer des données d'un fichier csv à une table de BDD d'un SQL Server 2000.
J'ai choisi d'intégrer ces données avec un lot DTS. J'ai chargé les données dans une table temporaire.
Il n'y a qu'un très faible pourcentage de données qui violent des contraintes, j'ai donc choisi d'insérer directement les données dans la table et de gérer les erreurs avec @@ERROR.

J'ai donc un bloc de T-SQL à la fin de mon lot qui, par le biais d'un curseur, parcourt tous les enregistrements de la table temporaire. Pour chaque enregistrement, il fait appel à une procédure stockée qui insère l'enregistrement passé en paramètre. Les insertions rejetées (quelque soit la raison) sont insérées dans une table de "rejet" avec le code erreur.
J'ai donc quelque chose de la forme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
SELECT @errorVar = @@ERROR, @errorRowCount = @@ROWCOUNT 
IF(@errorVar <> 0) 
BEGIN 
	ROLLBACK TRANSACTION 
	INSERT INTO REJET( [liste param] ) 
END 
ELSE 
[traitements]  
END 
RETURN 0
au niveau de la gestion des rejets dans ma procédure stockée juste après l'INSERT INTO qui génère des erreurs.

Le code s'exécute parfaitement, les insertions sont faites et les rejets sont bien dans la table rejet.

Mon problème :
Pendant l'exécution du lot DTS (création table temp+chargement des données+bloc T-SQL), le bloc T-SQL me retourne une erreur SQL de violation de contrainte.
Pourtant cette erreur est gérée, et (je me répète) le script s'est bien déroulé.

Quelqu'un connaîtrait-t'il un moyen d'empêcher l'affichage de cette erreur lors de l'exécution du lot ?

Merci d'avance.