我有一个包含大约 200 个具有许多外键约束的表的数据库。数据库中没有数据,我需要将行插入到指定的表中X
。
由于外键很多,我不知道如何在其他表中插入的顺序,以便我可以插入到 table 中X
。一些外键约束是分层的。
我怎样才能找出插入的顺序,以便我可以成功地将数据插入到表中X
?是否有任何 SQL 查询可以帮助我?
已编辑 我希望生成一个包含“TableName”、“ParentTableDependece”列的表,该表显示树视图并可以从中进行选择
我有一个包含大约 200 个具有许多外键约束的表的数据库。数据库中没有数据,我需要将行插入到指定的表中X
。
由于外键很多,我不知道如何在其他表中插入的顺序,以便我可以插入到 table 中X
。一些外键约束是分层的。
我怎样才能找出插入的顺序,以便我可以成功地将数据插入到表中X
?是否有任何 SQL 查询可以帮助我?
已编辑 我希望生成一个包含“TableName”、“ParentTableDependece”列的表,该表显示树视图并可以从中进行选择
使用此代码段,您可以找到引用您自己的表的所有其他表和所涉及的外键X
:
;WITH ReferencingFK AS
(
SELECT
fk.Name AS 'FKName',
OBJECT_NAME(fk.parent_object_id) 'ParentTable',
cpa.name 'ParentColumnName',
OBJECT_NAME(fk.referenced_object_id) 'ReferencedTable',
cref.name 'ReferencedColumnName'
FROM
sys.foreign_keys fk
INNER JOIN
sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id
INNER JOIN
sys.columns cpa ON fkc.parent_object_id = cpa.object_id AND fkc.parent_column_id = cpa.column_id
INNER JOIN
sys.columns cref ON fkc.referenced_object_id = cref.object_id AND fkc.referenced_column_id = cref.column_id
)
SELECT
FKName,
ParentTable,
ParentColumnName,
ReferencedTable,
ReferencedColumnName
FROM
ReferencingFK
WHERE
ReferencedTable = 'X' -- <=== put your table name here!
ORDER BY
ParentTable, ReferencedTable, FKName
拥有所有引用的表X
后,您可能还需要对其他表重复此操作(如果它们又依赖于外键引用)
为什么不是这个?
EXEC sp_msdependencies @objname = 'X'
拉吉
你可以试试:
EXEC sp_help 'TableName'
这将为您提供表的全部详细信息,即您可以获得与传递给它的对象相关的关系、索引和其他信息。