如何在SQL Server中使用级联删除?
如何在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日
如何在SQL Server Management Studio中,将“级联删除”添加到现有的外键:
首先,选择您的外键,并在新的查询窗口中打开它的“DROP and Create To..”。
接下来,只需将ON DELETE CASCADE
添加到ADD CONSTRAINT
命令中:
然后点击“执行”按钮运行此查询。
顺便说一句,要获取外键列表,并查看哪些具有“级联删除”功能,可以运行此脚本:
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。
希望这一切都有所帮助。对于长时间的手指,我表示抱歉。我只是想说明一点。