如何在SQLServer中使用级联删除?

如何在SQLServer中使用级联删除?

我有两个表:T1和T2,它们是现有的有数据的表。T1和T2之间有一对多的关系。如何在SQLServer中更改表定义以执行级联删除,当从T1删除记录时,T2中的所有关联记录也被删除。

他们之间存在着外来的限制。我不想删除表或创建一个触发器来执行T2的删除。例如,当我删除一个员工时,所有的考核记录也应该会消失。

T1-雇员,

Employee ID      
Name
Status

T2-业绩审查,

Employee ID - 2009 Review
Employee ID - 2010 Review


哆啦的时光机
浏览 1549回答 3
3回答

RISEBY

你需要,删除现有的外键约束,添加一个新的ON DELETE CASCADE设置已启用。类似于:ALTER TABLE dbo.T2   DROP CONSTRAINT FK_T1_T2   -- or whatever it's calledALTER TABLE dbo.T2   ADD CONSTRAINT FK_T1_T2_Cascade    FOREIGN KEY (EmployeeID) REFERENCES dbo.T1(EmployeeID) ON DELETE CASCADE

江户川乱折腾

若要在SQLServerManagementStudio中的现有外键中添加“级联删除”,请执行以下操作:首先,选择您的外键,然后打开它的“拖放并创建到.”在一个新的查询窗口中。然后,添加ON DELETE CASCADE到ADD CONSTRAINT指挥:然后点击“执行”按钮来运行这个查询顺便说一句,要获取您的ForeignKeys的列表,并查看哪些已打开“级联删除”,您可以运行以下脚本:SELECT     OBJECT_NAME(f.parent_object_id) AS 'Table name',    COL_NAME(fc.parent_object_id,fc.parent_column_id) AS 'Field name',    delete_referential_action_desc AS 'On Delete'FROM sys.foreign_keys AS f,      sys.foreign_key_columns AS fc,      sys.tables t  WHERE f.OBJECT_ID = fc.constraint_object_idAND t.OBJECT_ID = fc.referenced_object_idORDER BY 1如果你发现你不能DROP由于外键约束而产生的特定表,但是您无法确定是哪个FK导致了问题,那么您可以运行以下命令:sp_help 'TableName'本文中的SQL列出了引用特定表的所有FKS。希望这一切都有帮助。为长手指道歉。我只是想说明一下。
打开App,查看更多内容
随时随地看视频慕课网APP