我想查看通过缺少 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中的评论激发了这个问题。