J'ai du code dans un déclencheur après insertion qui peut potentiellement échouer. Une telle défaillance n'est pas cruciale et ne devrait pas annuler la transaction. Comment puis-je piéger l'erreur dans le déclencheur et faire exécuter le reste de la transaction normalement?Echec de la désactivation du déclencheur TSQL
L'exemple ci-dessous montre ce que je veux dire. Le déclencheur crée intentionnellement une condition d'erreur avec le résultat que l'insertion d'origine ("1") n'insère jamais dans la table. Try/Catch n'a pas l'air de faire l'affaire. Un semblable, older stack overflow question n'a pas donné de réponse sauf pour "empêcher l'erreur de se produire en premier lieu" - ce qui n'est pas toujours possible/facile.
D'autres idées?
create table test
(
a int not null
);
go
create trigger testTrigger on test
after insert as
begin
insert into test select null;
end;
go
insert into test values (1);
/Catch ne fonctionne pas? – cjk
@ck: car les violations de contraintes à l'intérieur des déclencheurs annihilent les transactions. – Quassnoi