2013-04-08 50 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