我有2个表:T1和T2,它们是现有的数据表。T1和T2之间有一对多的关系。当删除T1中的记录时,如何修改表定义以在SQL Server中执行级联删除,T2中的所有关联记录也被删除。
外国的约束在他们之间存在。我不想删除表或创建触发器来删除T2。例如,当我删除一个员工时,所有的评审记录也应该消失了。
T1 -员工,
Employee ID
Name
Status
T2 -工作表现检讨,
Employee ID - 2009 Review
Employee ID - 2010 Review
使用实例在SQL Server Management Studio中添加“Cascade delete”外键。
首先,选择你的外键,并在一个新的查询窗口中打开它的“DROP and Create To.”。
然后,只需添加ON DELETE CASCADE到add约束命令:
然后点击“执行”按钮来运行这个查询。
顺便说一下,要获得一个外键列表,并查看哪些外键开启了“Cascade delete”,你可以运行这个脚本:
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
如果你发现由于外键约束,你不能DROP一个特定的表,但你不知道是哪个FK导致了这个问题,那么你可以运行这个命令:
sp_help 'TableName'
那篇文章中的SQL列出了引用特定表的所有fk。
希望这些能有所帮助。
抱歉我的手指太长了。我只是想表达我的观点。