2009-10-29 98 views

回答

3

是的 - INFORMATION_SCHEMA.TABLES應該是你在找什麼。

它會給你這樣的:

aspnetdb dbo aspnet_Paths      BASE TABLE 
aspnetdb dbo aspnet_PersonalizationAllUsers BASE TABLE 
aspnetdb dbo aspnet_PersonalizationPerUser  BASE TABLE 
aspnetdb dbo vw_aspnet_WebPartState_Paths  VIEW 
aspnetdb dbo vw_aspnet_WebPartState_Shared  VIEW 
aspnetdb dbo vw_aspnet_WebPartState_User  VIEW 
aspnetdb dbo aspnet_Applications    BASE TABLE 

如果你想知道一個表的列,看看INFORMATION_SCHEMA.COLUMNS

SELECT * 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'aspnet_Users' 

將爲您提供指定表的列的所有詳細信息。

+0

我知道我可以找到這些表中的信息,但我正在尋找一種自動方式來檢索完整的創建腳本,包括表的所有約束,就像在MSSQL Management Studio中工作時一樣。 – 2009-10-29 17:52:25

+0

我不認爲你可以在任何系統目錄視圖的任何地方「找到」完整的創建腳本。如果你想要一個完整的腳本,你需要使用SMO,正如Nestor建議的那樣 - 它有一個函數來編寫任何類型的數據庫對象 - 這可能只是檢查這些系統目錄視圖並將這些信息連接在一起形成一個完整的創建腳本。 – 2009-10-29 20:28:23

0

您可以使用.NET中的SMO(Microsoft.SqlServer.Smo)來編寫表格。

+0

哦,我明白了..對不起,我不明白你的問題。 – Nestor 2009-10-29 18:30:59

1

將INFORMATION_SCHEMA用於視圖和代碼將失敗。數據僅限於nvarchar(4000),因此不會讀取更長的內容。使用sys.sql_modulesOBJECT_DEFINITION

對於表格來說,這更困難。 「表」由列,約束,索引,可能的規則,UDT組成(我忘記了什麼?)。這就是爲什麼SSMS與視圖或存儲過程相比有很多表腳本選項的原因。

我建議分析SSMS,並希望它不使用SMO ...或通過CLR代碼甚至xp_cmdshell使用SMO。

+0

謝謝,有價值的信息。 – 2009-10-29 21:03:57

+0

NVARCHAR(MAX)* rocks *。啊,我們不得不跳過SQL2K .... – 2009-10-30 14:47:32

相關問題