为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

哆啦的时光机 2019-06-18 11:01:47
如何在SQLServer中使用级联删除?我有两个表:T1和T2,它们是现有的有数据的表。T1和T2之间有一对多的关系。如何在SQLServer中更改表定义以执行级联删除,当从T1删除记录时,T2中的所有关联记录也被删除。他们之间存在着外来的限制。我不想删除表或创建一个触发器来执行T2的删除。例如,当我删除一个员工时,所有的考核记录也应该会消失。T1-雇员,Employee ID       Name StatusT2-业绩审查,Employee ID - 2009 Review Employee ID - 2010 Review
查看完整描述

3 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

你需要,

  • 删除现有的外键约束,
  • 添加一个新的

    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


查看完整回答
反对 回复 2019-06-18
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

若要在SQLServerManagementStudio中的现有外键中添加“级联删除”,请执行以下操作:

首先,选择您的外键,然后打开它的“拖放并创建到.”在一个新的查询窗口中。


然后,添加ON DELETE CASCADEADD 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。

希望这一切都有帮助。

为长手指道歉。我只是想说明一下。


查看完整回答
反对 回复 2019-06-18
  • 3 回答
  • 0 关注
  • 1545 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信