我的localhost中有大约560个表,每个表至少有一个主键,外键引用,现在所有表都是空的。
我开始将数据插入到它们中,但是,正如您所猜测的那样 - 插入这些表中的任何一个都会被on或其他键冲突。
我想知道是否有办法找出哪个表具有最高的外键引用,以便我可以先开始插入它。如果我的想法或我的方法听起来完全错误,请提出更好的方法。
我正在使用SQL Server 2012和SSMS。
答案 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将不信任外键,并且索引/性能可能会受到影响。