Mam pewien kod w wyzwalaczu po wstawieniu, który może się nie powieść. Taka awaria nie jest kluczowa i powinna wycofać transakcję. Jak mogę przechwycić błąd wewnątrz wyzwalacza i zlecić wykonanie reszty transakcji?TSQL powoduje, że wyzwalacz nie działa w trybie cichym.
Poniższy przykład pokazuje, co mam na myśli. Spust celowo tworzy warunek błędu, w wyniku czego oryginalna wstawka ("1") nigdy nie jest wstawiana do tabeli. Try/Catch nie załatwił sprawy. Podobny, older stack overflow question nie dał odpowiedzi, z wyjątkiem "zapobiegania występowaniu błędu w pierwszej kolejności" - co nie zawsze jest możliwe/łatwe.
Jakieś inne pomysły?
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);
Dlaczego spróbowano/Catch nie działa? – cjk
@ck: ponieważ naruszenia więzów wewnątrz wyzwalaczy skazują transakcje. – Quassnoi