如何在SQL Server中使用级联删除?

39 浏览
0 Comments

如何在SQL Server中使用级联删除?

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

它们之间已经有了外键约束。我不想删除表或创建触发器来删除T2。例如,当我删除一个员工时,所有的审核记录也应该被删除。

T1-员工,

Employee ID      
Name
Status

T2-表现评估,

Employee ID - 2009 Review
Employee ID - 2010 Review

admin 更改状态以发布 2023年5月23日
0
0 Comments

您需要执行以下操作:

  • 删除现有的外键约束,
  • 添加启用了ON DELETE CASCADE设置的新约束。

类似于:

ALTER TABLE dbo.T2
   DROP CONSTRAINT FK_T1_T2   -- or whatever it's called
ALTER TABLE dbo.T2
   ADD CONSTRAINT FK_T1_T2_Cascade
   FOREIGN KEY (EmployeeID) REFERENCES dbo.T1(EmployeeID) ON DELETE CASCADE

0
0 Comments

如何在SQL Server Management Studio中,将“级联删除”添加到现有的外键:

首先,选择您的外键,并在新的查询窗口中打开它的“DROP and Create To..”。

enter image description here

接下来,只需将ON DELETE CASCADE添加到ADD CONSTRAINT命令中:

n
然后点击“执行”按钮运行此查询。

顺便说一句,要获取外键列表,并查看哪些具有“级联删除”功能,可以运行此脚本:

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_id
AND t.OBJECT_ID = fc.referenced_object_id
ORDER BY 1

如果您发现由于外键约束,无法删除特定表,但无法确定哪个FK引起了问题,那么可以运行此命令:

sp_help 'TableName'

该文章中的SQL列出了引用特定表的所有FK。

希望这一切都有所帮助。对于长时间的手指,我表示抱歉。我只是想说明一点。

0