2011-12-14 22 views
0

我試圖找到一個系統表或者進行一些連接來獲取一個表,在這個表中我可以找到我的服務器中所有數據庫的所有模式的所有表的所有列。任何包含SQL Server 2008中所有數據庫,模式,表和列信息的系統表或視圖?

我這樣做是爲了學術目的,所以我不能使用任何存儲過程或函數,我必須自己創建它。

關鍵是創建一個存儲過程或函數,它接收數據庫名稱,模式名稱和表名作爲輸入參數並引發包含的所有列的列表,但如果我沒有收到表名,我應該列出給定數據庫和模式中包含的所有表的所有列。如果我也沒有收到模式名稱作爲輸入參數,我應該列出給定數據庫中所有模式的所有表的所有列。

任何想法?正如我所說,我不能使用任何存儲過程或函數來做到這一點。

+0

我已經看過很多系統表,我試圖形成串並用EXEC的ExecuteSQL執行它們卻成爲一個非常混亂,我想應該有更好的方式來做到這一點 – user1073816 2011-12-14 16:33:12

+0

我不認爲任何典型的系統目錄視圖都超出了當前數據庫的範圍。因此,如果您需要**所有**數據庫,則必須迭代數據庫並檢查其中每個數據庫的系統目錄視圖 – 2011-12-14 16:49:20

+0

此迭代是否只能通過動態SQL進行? – user1073816 2011-12-14 16:54:12

回答

0

這是你需要什麼,由當期的用戶當前數據庫accessable的所有表中的所有列:

http://msdn.microsoft.com/en-us/library/ms188348.aspx

要找到所有數據庫一樣,你必須連接到每個數據庫然後訪問系統視圖。

如果您作爲dba用戶連接,您將有權訪問所有模式中的所有表。

0

sys模式中有些表可能是有意義的。 sys.databases,sys.schemas,sys.tables,sys.columns,所有這些都可以很容易地連接在一起並根據需要進行過濾。

sp_msforeachdb 'SELECT t.name FROM [?].sys.schemas s INNER JOIN [?].sys.tables t ON s.[schema_id] = t.[schema_id] INNER JOIN [?].sys.columns c ON c.[object_id] = t.[object_id]';

相關問題