J'ai 2 tables avec relation entre. la première table contient des groupes avec groupid. le tableau 2 tient la relation entre les 2 groupes. Lors de la pré-suppression d'une suppression d'un groupe du tableau 1, tous les groupes associés doivent être supprimés.Suppression de trigger SQL à partir de plusieurs tables
cela inclut les sous-groupes du groupe et il y a des sous-groupes récursive.
exemple des données dans les deux tables avant de supprimer
Tableau Tbl_TemplateListGroup
GroupId |Name |Description |TemplateListId
100 | Group 1 | NULL | 6
101 | Group 2 | NULL | 6
102 | Group 11 | NULL | 6
103 | Group 12 | NULL | 6
104 | Group 13 | NULL | 6
105 | Group 131 | NULL | 6
106 | Group 1311 | NULL | 6
107 | Group111 | NULL | 6
Tableau Tbl_TemplateListGroupGroup
Master | Sub SequenceNumber
Group | Group
Id | Id
100 | 102 | 1
100 | 103 | 2
100 | 104 | 3
102 | 107 | 1
104 | 105 | 1
105 | 106 | 1
exemple de suppression de données après Tableau Tbl_TemplateListGroup
GroupId |Name |Description |TemplateListId
100 |Group 1 | |6
101 |Group 2 | |6
102 |Group 11 | |6
103 |Group 12 | |6
107 |Group111 | |6
Tabel Tbl_TemplateListGroupGroup
Master Sub SequenceNumber
Group Group
Id Id
100 |102 |1
100 |103 |2
102 |107 |1
la déclaration de suppression
delete from tbl_TemplateListGroup where GroupId = 104
Le déclencheur est maintenant:
CREATE TRIGGER TR_TemplateListGroupDelGroup
on Tbl_TemplateListGroup
INSTEAD OF DELETE
AS
BEGIN
SET NOCOUNT ON;
BEGIN
SELECT GroupId INTO tmpTbl FROM Tbl_TemplateListGroup
WHERE GroupId in (SELECT SubGroupId FROM Tbl_TemplateListGroupGroup
WHERE MasterGroupId in (select d.GroupId from deleted d))
DELETE FROM Tbl_TemplateListGroupGroup
WHERE SubGroupId in (select d.GroupId from deleted d)
DELETE FROM Tbl_TemplateListGroupGroup
WHERE MasterGroupId in (select d.GroupId from deleted d)
DELETE FROM Tbl_TemplateListGroup
WHERE GroupId in (select d.GroupId from deleted d)
DELETE FROM Tbl_TemplateListGroup
WHERE GroupId in (select GroupId FROM tmpTbl)
DROP TABLE tmpTbl;
END
END
cela ne fonctionne pas pour 2 raisons
- L'utilisateur n'a aucun droit de création de table et ne peut donc pas créer de table temporaire. (existe-t-il un autre moyen d'obtenir ces données).
- Je pense que le groupe avec groupId 105 est limite la supprimer parce que le déclencheur travaillait (en mode sa) avant d'avoir ajouté cet élément avec sa relation.
Pour l'instant je supprime les deux tables et les remplis à nouveau avec les données correctes. Je voudrais résoudre cela dans la base de données.
Tout le monde peut créer de véritables tables temporaires (celles préfixées par '#'). –
En outre, quelle version de SQL Server? –