2013-09-08 3 views
3

En supposant que j'ai trois tables:SQL supprimer déclencheur dans

TABLE_1:

ID  INT  PRIMARY 
name NVARCHAR 

TABLE_2:

ID   INT PRIMARY 
Table_1_ID INT (foreign key) 

table_3:

ID   INT PRIMARY 
Table_2_ID INT (foreign key) 

Les deux premières tables ont les déclencheurs suivants:

-- Table_1 
CREATE TRIGGER tr_1 
ON Table_1 
INSTEAD OF DELETE 
AS 
BEGIN 
    DELETE FROM Table_2 
    WHERE Table_1_ID IN (SELECT deleted.ID FROM Table_1) 

    DELETE FROM Table_1 
    WHERE ID IN (SELECT deleted.ID FROM deleted) 
END 

-- Table_2 
CREATE TRIGGER sr_bf_trigger_delete_ID 
ON Table_2 
INSTEAD OF DELETE 
AS 
BEGIN 
    DELETE FROM Table_3 
    WHERE Table_2_ID IN (SELECT deleted.ID FROM deleted) 

    DELETE FROM Table_2 
    WHERE ID IN (SELECT deleted.ID FROM deleted) 
END 

L'idée est qu'une fois supprimer une ligne (ou lignes) dans Table_1, il va commencer le déclencheur et supprimer les lignes correspondantes dans Table_2. Toutefois, avant de supprimer les lignes dans Table_2, les lignes correspondantes dans Table_3 sont supprimées.

Est-ce que cela fonctionnerait? Le problème possible que je vois est que les deux fois j'accède au même "supprimé" -Table.

Répondre

0

vos déclencheurs fonctionnent bien avec des corrections mineures (fautes de frappe supprimées):

CREATE TRIGGER tr_1 
ON Table_1 
INSTEAD OF DELETE 
AS 
BEGIN 
    DELETE FROM Table_2 
    WHERE Table_1_ID IN (SELECT d.ID FROM deleted as d) 

    DELETE FROM Table_1 
    WHERE ID IN (SELECT d.ID FROM deleted as d) 
END; 

-- Table_2 
CREATE TRIGGER sr_bf_trigger_delete_ID 
ON Table_2 
INSTEAD OF DELETE 
AS 
BEGIN 
    DELETE FROM Table_3 
    WHERE Table_2_ID IN (SELECT d.ID FROM deleted as d) 

    DELETE FROM Table_2 
    WHERE ID IN (SELECT d.ID FROM deleted as d) 
END; 

Voir sql fiddle demo