1

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

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

我做到了SELECT * FROM sys.foreign_keys,但这给了我约束的名称- 而不是子父的名称和关系中的(多汁位)。另外,与我们下面的做法不同,之前的设计者对 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

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

4

1 回答 1

1

A wiser version of myself stumbles upon a question from the curious, younger version of myself. The answer is

EXEC sp_fkeys 'Users'

Hoping me from +40 years drop by this week for some additional words of wisdom for the years ahead :)

于 2014-12-08T17:56:47.323 回答