2010-08-05 17 views
0

Une table porte le nom "Stages". Chaque scène peut avoir des enfants de 0 à l'infini. Dans la table "Stages" il y a une colonne nommée "Parent". Cette colonne est une clé étrangère pour la même table "Stages".Suppression d'une arborescence en cascade dans MS SQL Server Express 2005

Comment faire une suppression en cascade pour cet arbre? Je veux quand suppression de toute ligne de ce tableau, supprimer automatiquement tous leurs enfants et leurs petits-enfants ...

Avec la requête suivante

GO 
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Stage_Stage]') AND parent_object_id = OBJECT_ID(N'[dbo].[Stage]')) 
ALTER TABLE [dbo].[Stage] WITH CHECK ADD CONSTRAINT [FK_Stage_Stage] FOREIGN KEY([parent]) 
REFERENCES [dbo].[Stage] ([id]) ON DELETE CASCADE 
GO 
ALTER TABLE [dbo].[Stage] CHECK CONSTRAINT [FK_Stage_Stage] 
GO 

Je reçois cette erreur

Msg 1785, Level 16, State 0, Line 2 
Introducing FOREIGN KEY constraint 'FK_Stage_Stage' on table 'Stage' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. 
Msg 1750, Level 16, State 0, Line 2 
Could not create constraint. See previous errors. 
Msg 4917, Level 16, State 0, Line 1 
Constraint 'FK_Stage_Stage' does not exist. 
Msg 4916, Level 16, State 0, Line 1 
Could not enable or disable the constraint. See previous errors. 

Répondre

1

Ajouter touche étrangère avec l'option ON DELETE CASCADE pour toutes les tables "enfant".

ALTER TABLE SomeChildTable 
CONSTRAINT YOurConstraintName 
FOREIGN KEY (YourParentId) 
REFERENCES YourParentTable(ParentTableId) ON DELETE CASCADE; 

pour les nouvelles tables:

CREATE TABLE ttt 
(
    ... 
    CONSTRAINT YOurConstraintName 
    FOREIGN KEY (YourParentId) 
    REFERENCES YourParentTable(ParentTableId) ON DELETE CASCADE 
) 
+0

Comment faire en utilisant MS SQL Enterprise Manager Express 2005? –

+0

Cela fonctionne uniquement sur les tables de distinction. Lorsque le lien de table sur lui-même cela ne fonctionne pas –

+0

@ Evl-ntnt, son fonctionne pour les tables qui ont un lien vers lui-même. Pouvez-vous fournir des informations sur ce que vous avez fait, et qu'est-ce qui ne fonctionne pas exactement? –