posiadam dwie tabele:
CREATE TABLE abc (id int NOT NULL IDENTITY(1,1) PRIMARY KEY, id_a int FOREIGN KEY REFERENCES pp(id_a)) go
oraz
CREATE TABLE pp (id_a int NOT NULL IDENTITY(1,1) PRIMARY KEY, test int NOT NULL) go
Chciałbym aby trigger uniemożliwiał usunięcie wpisu w tabeli pp gdy wartość test jest równa 0.
CREATE TRIGGER abc ON pp FOR DELETE AS IF ( SELECT count(*) FROM deleted WHERE test = 0) > 0 begin print ' Nie można usunąc wpisu ' rollback tran end else IF(SELECT count(*) FROM deleted WHERE test = 1) > 0 begin /*DELETE abc WHERE id_a IN (SELECT id_a FROM deleted) DELETE pp WHERE id_a IN (SELECT id_a FROM deleted)*/ rollback tran end go
Przyjmijmy, że w tabeli pp znajdują się dwa wpisy z czego pierwszy(id_a=1) wartość test ma ustawiona na 1 zaś drugi(id_a=2) na 0.
Wywyłanie delete:
DELETE FROM pp WHERE id_a = 1
zwraca komunikat:
The DELETE statement conflicted with the REFERENCE constraint "FK__pp__id_pr__4707859D". The conflict occurred in database "master", table "dbo.pp", column 'id_a'.
The statement has been terminated.
W jaki sposób usunąć za pomocą triggera najpierw wartość z tabeli abc, a dopiero potem z pp?
W razie jakichkolwiek pytań lub niejasności proszę pisać.