0

我有一个包含大约 200 个具有许多外键约束的表的数据库。数据库中没有数据,我需要将行插入到指定的表中X

由于外键很多,我不知道如何在其他表中插入的顺序,以便我可以插入到 table 中X。一些外键约束是分层的。

我怎样才能找出插入的顺序,以便我可以成功地将数据插入到表中X?是否有任何 SQL 查询可以帮助我?

已编辑 我希望生成一个包含“TableName”、“ParentTableDependece”列的表,该表显示树视图并可以从中进行选择

4

3 回答 3

2

使用此代码段,您可以找到引用您自己的表的所有其他表和所涉及的外键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后,您可能还需要对其他表重复此操作(如果它们又依赖于外键引用)

于 2013-04-08T05:52:12.430 回答
1

为什么不是这个?

EXEC sp_msdependencies @objname = 'X'

拉吉

于 2013-04-08T06:40:16.973 回答
1

你可以试试:

EXEC sp_help 'TableName'

这将为您提供表的全部详细信息,即您可以获得与传递给它的对象相关的关系、索引和其他信息。

于 2013-04-08T06:18:45.203 回答