2013-04-08 80 views
0

我有一个包含大约200个表的外键约束的数据库。数据库中没有数据,我需要将行插入指定的表X查找所有防止插入到SQL Server中的表的外键

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

如何找到插入的顺序,以便我可以成功地将数据插入表X?有没有任何SQL查询可以帮助我?

编辑 我想导致与列“表名”表中,“ParentTableDependece”,显示树形视图,并能得到从中选择

+1

看 “表X的” 在SQL Server Management Studio中的依赖关系,并期待在 “依赖此对象”。 – 2013-04-08 04:07:12

+1

是的..你在句子中大写每个世界,但没有问题的标题.. :) – 2013-04-08 04:07:48

+0

右键单击表格,然后点击查看依赖项 – 2013-04-08 04:21:13

回答

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的所有表,你可能还需要重复这一过程,其他表(如果它们又取决于外键引用)

+0

我运行这个查询,但没有结果返回 – 2013-04-08 07:58:38

+1

这就像一个魅力! – shashi 2013-06-10 01:57:24

1

你可以试试:

EXEC sp_help 'TableName' 

这会给你的表的整个细节即可以拿到关系,索引和你通过与它的对象相关的其他信息。

+0

嗨,Iswanto San,你能指定,你在上面的答案中编辑了什么。 – khush 2013-04-10 04:35:51

1

为什么不能这样?

EXEC sp_msdependencies @objname = 'X' 

拉吉

+0

这是好的,但不显示等级依赖 – 2013-04-08 07:56:13

+0

你是什么意思?输出中的oSequence列应该告诉你关系的级别。 – Raj 2013-04-08 08:12:25

+0

我希望结果在一个**表**,列“TableName”,“ParentTableDependece”显示树视图,并可以从中选择它 – 2013-04-10 09:24:24