Sql server MS SQL Server Express 2005中的级联树删除

Sql server MS SQL Server Express 2005中的级联树删除,sql-server,cascade,delete-row,sql-server-2005-express,Sql Server,Cascade,Delete Row,Sql Server 2005 Express,一个表的名称为“Stages”,每个Stage可以有0到无穷多个子级。在表“Stages”中有一个名为“Parent”的列。此列是同一表“Stages”的外键 如何对此树进行级联删除?我想在删除此表中的任何行时,自动删除其所有子项及其子项的子项 使用以下查询 GO IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Stage_Stage]') AND parent_objec

一个表的名称为“Stages”,每个Stage可以有0到无穷多个子级。在表“Stages”中有一个名为“Parent”的列。此列是同一表“Stages”的外键

如何对此树进行级联删除?我想在删除此表中的任何行时,自动删除其所有子项及其子项的子项

使用以下查询

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
我得到这个错误

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.

为所有“子”表添加带有ON DELETE CASCADE选项的foreigns键

对于新表格:

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

这仅适用于区分表。当表链接在其自身上时,此work@Evl-ntnt,它适用于具有自身链接的表。请您提供您所做的事情的信息,以及什么是不起作用的?我在sql.ru上读到不起作用的消息,明天我将再次尝试,并向您发送消息。В общем в моей БД есть таблица в которой хранятся этапы разработки. Логически один этап может разбиваться на другие этапы, в БД это реализовано с помощью поля "родитель" - которое ссылается на другую запись в этой таблице. Так вот. Хочу что бы при удалении одной записи удалялись все записи у которых в поле родитель - удаляемая запись (логически - удаляются потомки удаляемой записи). Прочитал что одном форуме что каскадное удаление действует только на разные таблицы. Вот тут прочитал Глянь сюда
CREATE TABLE ttt
(
  ...
  CONSTRAINT YOurConstraintName 
  FOREIGN KEY (YourParentId)
  REFERENCES YourParentTable(ParentTableId) ON DELETE CASCADE
)