2016-04-20 2 views
0

J'ai une table (appelée A) dans ma base de données MS SQL Server et j'ai créé après insertion déclencheur sur ce qui traite les données insérées et insère quelques-unes des colonnes dans une autre table (nous allons dites B).tsql déclencheur qui ne reinsére roule pas

Jusqu'à présent, il fonctionne assez bien, mais j'ai un problème lorsque le second insert (déclenché) dans le tableau B n'est pas appropriée (ex. Valeurs insérées ne sont pas conformes aux contraintes d'intégrité). Dans ce cas, toutes les transactions sont annulées, en particulier la première insertion dans la table A.

Je souhaite que les valeurs soient insérées dans le tableau A même si la deuxième insertion (dans le tableau B) était incorrecte et n'a pas été effectuée. J'ai essayé plusieurs versions avec le bloc TRY/CATCH mais à tout moment, mon trigger génère une erreur et toutes les transactions sont annulées. Y a-t-il un moyen de contourner ce problème? Merci d'avance.

Répondre

0

Essayez de nettoyer les données pour satisfaire les contraintes d'intégrité avant INSERT à la table B (c.-à - faire WHERE EXISTS contrôles dans le cadre du INSERT)

+0

Merci pour votre réponse, vous êtes tout à fait raison, je fait quelques IF EXISTS blocs mais il y a toujours une probabilité de se produire une erreur qui est inattendue et non gérée. Le problème est que j'ai la table A très importante qui est remplie de données par des serveurs externes et je ne veux pas perdre une partie de ces données. Le tableau B est sous mon contrôle et je peux travailler autour des cas qui ne peuvent pas être insérés dans le tableau B. – Qrman

+0

En situation idéale, je voudrais avoir des données insérées dans le tableau A sans respect du comportement de déclenchement et déclencheur essaierait d'insérer des données dans La table B et l'état de mise à jour dans la table A sont 'insert ok' et s'il y a eu des erreurs, l'enregistrement dans la table A est 'insert error'. Ensuite, je serais en mesure de vérifier manuellement ce qui ne va pas avec les cas qui n'ont pas été insérés dans la table B. Est-il possible de le faire avec un déclencheur? – Qrman

+0

Autre que la contrainte de la table B de détente? Je ne peux pas penser à une autre façon. Ces contraintes échappent au contrôle de votre déclencheur. –