是否有標準方法來檢索SQL Server中的表的「CREATE TABLE ..」定義?在SQL Server中使用類似INFORMATION_SCHEMA.VIEW_DEFINITION的東西創建表格
我可以要求INFORMATION_SCHEMA的意見和功能/程序的定義,所以我認爲這是很自然的得到相同的表,但我沒有找到任何東西。
是否有標準方法來檢索SQL Server中的表的「CREATE TABLE ..」定義?在SQL Server中使用類似INFORMATION_SCHEMA.VIEW_DEFINITION的東西創建表格
我可以要求INFORMATION_SCHEMA的意見和功能/程序的定義,所以我認爲這是很自然的得到相同的表,但我沒有找到任何東西。
是的 - 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'
將爲您提供指定表的列的所有詳細信息。
將INFORMATION_SCHEMA用於視圖和代碼將失敗。數據僅限於nvarchar(4000),因此不會讀取更長的內容。使用sys.sql_modules或OBJECT_DEFINITION。
對於表格來說,這更困難。 「表」由列,約束,索引,可能的規則,UDT組成(我忘記了什麼?)。這就是爲什麼SSMS與視圖或存儲過程相比有很多表腳本選項的原因。
我建議分析SSMS,並希望它不使用SMO ...或通過CLR代碼甚至xp_cmdshell使用SMO。
謝謝,有價值的信息。 – 2009-10-29 21:03:57
NVARCHAR(MAX)* rocks *。啊,我們不得不跳過SQL2K .... – 2009-10-30 14:47:32
我知道我可以找到這些表中的信息,但我正在尋找一種自動方式來檢索完整的創建腳本,包括表的所有約束,就像在MSSQL Management Studio中工作時一樣。 – 2009-10-29 17:52:25
我不認爲你可以在任何系統目錄視圖的任何地方「找到」完整的創建腳本。如果你想要一個完整的腳本,你需要使用SMO,正如Nestor建議的那樣 - 它有一個函數來編寫任何類型的數據庫對象 - 這可能只是檢查這些系統目錄視圖並將這些信息連接在一起形成一個完整的創建腳本。 – 2009-10-29 20:28:23