列出引用特定表中特定列的所有外键约束

时间:2012-11-23 19:40:28

标签: sql-server foreign-keys

我希望看到所有表和列的列表,这些表和列通过缺少ON DELETE = CASCADE设置的外键约束(直接或间接)引用“主”表中的特定列。

棘手的部分是,在最多5层深处存在间接关系。 (例如:...曾孙子 - > FK3 =>孙子=> FK2 =>孩子=> FK1 =>主表)。我们需要挖掘叶子表 - 列,而不仅仅是第一级。关于这一点的“好”部分是执行速度不受关注,它将在生产数据库的备份副本上运行,以修复未来的任何关系问题。

我做了SELECT * FROM sys.foreign_keys但是这给了我约束的名称 - 而不是子父母的名称和列< / strong>在关系中(多汁的位)。此外,之前的设计师使用FK约束的简短,非描述性/随机名称,与我们下面的做法不同

我们在SQL Server中添加约束的方式:

ALTER TABLE [dbo].[UserEmailPrefs]  
WITH CHECK ADD  CONSTRAINT [FK_UserEmailPrefs_UserMasterTable_UserId] FOREIGN KEY([UserId])
REFERENCES [dbo].[UserMasterTable] ([UserId])
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[UserEmailPrefs] CHECK CONSTRAINT [FK_UserEmailPrefs_UserMasterTable_UserId]
GO

this SO question中的评论启发了这个问题。

1 个答案:

答案 0 :(得分:1)

我自己的一个更聪明的版本偶然发现了我自己的好奇,年轻版本的问题。答案是

EXEC sp_fkeys 'Users'

希望我在本周能够在未来几年内有更多的智慧消息,从而在40多年后下降:)