如何找出数据库中哪个表具有最多的外键引用

时间:2014-10-24 09:16:46

标签: sql sql-server foreign-keys

我的localhost中有大约560个表,每个表至少有一个主键,外键引用,现在所有表都是空的。

我开始将数据插入到它们中,但是,正如您所猜测的那样 - 插入这些表中的任何一个都会被on或其他键冲突。

我想知道是否有办法找出哪个表具有最高的外键引用,以便我可以先开始插入它。如果我的想法或我的方法听起来完全错误,请提出更好的方法。

我正在使用SQL Server 2012和SSMS。

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT Count(Object_name(parent_object_id)) AS cnt,
       Object_name(parent_object_id)        AS table_name
FROM   sys.objects
WHERE  type = 'f'
GROUP  BY Object_name(parent_object_id)
ORDER  BY cnt DESC 

答案 1 :(得分:0)

您可以使用sys表,这将获得所有外键:

SELECT tables.name as TableName, foreign_keys.name AS ForeignKeyName
FROM sys.foreign_keys
JOIN sys.tables
    ON tables.object_id = foreign_keys.parent_object_id

稍作修改,您就可以获得每个表的外键数量:

SELECT tables.name as TableName, COUNT(*) AS FKCount
FROM sys.foreign_keys
JOIN sys.tables
    ON tables.object_id = foreign_keys.parent_object_id
GROUP BY tables.name

但是,您的任务似乎略有不同。我的建议是禁用所有密钥,进行数据传输,然后重新启用密钥:

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT ALL"
--Do your data copy here
EXEC sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT ALL"

请注意,此处重新启用密钥是强制检查约束,这很重要,否则SQL将不信任外键,并且索引/性能可能会受到影响。