2011-10-13 22 views
2

我使用的是關係表。在一個按鈕上點擊,我必須以這樣一種方式檢索數據庫中的所有表格,即所有主表格都在頂端(即從前端生成腳本)並將它們保存到文本文件中。編程方式獲取所有表中,DB w.r.t關係

回地面目的:我需要生成腳本訂單中所有表和在執行生成的腳本外鍵約束的錯誤不會occur.So我需要得到表中關係的順序。

我怎樣才能找回那樣的表?

+0

這是真的很混亂。爲什麼在這裏標記ASP.NET?爲什麼是C#?您是否正在創建SQL腳本,以便您可以複製數據庫對象?你是否試圖在網絡上顯示你的數據庫結構? – jwiscarson

回答

3

如果使用SQL Server Management Studio中:

右鍵單擊[你的數據庫] - >任務 - >生成腳本 - >下一步 - >下一步 - > [選擇表]下一頁 - > ...一路到最後,

嚮導應該能夠創建首先創建依賴對象的智能腳本。

編輯(2011年10月18日):

如果您從以下查詢的輸出腳本,你應該擔心外鍵的依賴給你的問題:

;with tcte(tid, tname, lvl) 
as 
(
select st.object_id, st.name, 0 
from sys.tables st left join sys.foreign_keys sfk on sfk.parent_object_id = st.object_id 
where sfk.name is null 

union all 

select st.object_id, st.name, 1 
from sys.tables st left join sys.foreign_keys sfk on sfk.parent_object_id = st.object_id 
where sfk.parent_object_id = sfk.referenced_object_id 

union all 

select st.object_id as tid, st.name, tcte.lvl + 1 
from sys.tables st inner join sys.foreign_keys sfk on sfk.parent_object_id = st.object_id 
inner join tcte on tcte.tid = sfk.referenced_object_id 
where tcte.tid <> sfk.parent_object_id 
) 

select tname, max(lvl) lvl from tcte group by tname order by lvl 
+0

對不起,我猜不清楚我的問題。我需要以編程方式進行此操作。 :-) – Manek

+1

@Manek:我編輯我的回答包括訂單這樣一種方式,如果你的腳本在它們被查詢返回的順序表,你不會需要擔心外鍵的依賴導致你的數據庫表的查詢失敗 –

+0

非常感謝這..我嘗試瞭解決方案。但它只適用於數量較少的表和關係的數據庫。 但我有一個數據庫有50多個表和一大堆關係。 我包含「選項(maxrecursion 0);代碼在查詢這反過來又增加最大遞歸的終點。」 因此,儘管執行與數據庫查詢,它正在爲一個相當長的時間執行,我不能夠以結果到達。 有什麼我可以延長更多的時間。 – Manek

相關問題