Witam,

posiadam dwie tabele:

  1. CREATE TABLE abc
  2. (id int NOT NULL IDENTITY(1,1) PRIMARY KEY,
  3. id_a int FOREIGN KEY REFERENCES pp(id_a))
  4. go


oraz

  1. CREATE TABLE pp
  2. (id_a int NOT NULL IDENTITY(1,1) PRIMARY KEY,
  3. test int NOT NULL)
  4. go


Chciałbym aby trigger uniemożliwiał usunięcie wpisu w tabeli pp gdy wartość test jest równa 0.

  1. CREATE TRIGGER abc ON pp FOR DELETE
  2. AS
  3. IF ( SELECT count(*) FROM deleted WHERE test = 0) > 0
  4. begin
  5. print ' Nie można usunąc wpisu '
  6. rollback tran
  7. end
  8. else IF(SELECT count(*) FROM deleted WHERE test = 1) > 0
  9. begin
  10.  
  11. /*DELETE abc WHERE id_a IN (SELECT id_a FROM deleted)
  12. DELETE pp WHERE id_a IN (SELECT id_a FROM deleted)*/
  13.  
  14. rollback tran
  15. end
  16. 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:

  1. 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ć.