2009-10-02 51 views
4

我正在尋找命令行或腳本解決方案來將SQL Server 2005+的DDL從所有數據庫對象中提取出來:表,存儲過程,視圖,索引/索引,約束等。對GUI工具不感興趣。SQL Server與Oracle DBMS_METADATA.GET_DDL平行嗎?

首選是內置工具,因爲那是最能與Oracle的DBMS_METADATA相媲美的東西。此外,偏愛一個解決方案,如Oracle對獲得DDL出來一樣簡單 - 例如,一個班輪:

 

    SELECT DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE') FROM DUAL 

注:把事情出在SQL Server程序2005似乎很容易,但我不能找到任何對其他對象類似的引用(如表格)。

 

    SELECT definition 
    FROM Sys.sql_modules 
    WHERE object_id = OBJECT_ID('MyProc') 

在此先感謝!

+1

看來oracle語法確實是'select ... from dual'。 – 2012-05-09 13:17:39

回答

4

Transact-SQL語言不支持。客戶端庫(SMO)可以使用Scripter對象執行此操作,請參閱http://msdn.microsoft.com/en-us/library/ms162153.aspx上的示例。您可以使用PowerShell中的SMO作爲腳本解決方案。

SQL管理工作室也有一個選項(右鍵點擊數據庫,轉到任務,選擇生成腳本),它使用一個SMO Scripter的封面。

+0

我懷疑可能沒有任何類似的東西讓DDL出現在一個班輪中。我會調查SMO的東西 - 非常感謝! – 2009-10-02 23:19:12

2

我寫了SMOscript,這是一個使用SMO生成所有數據庫對象的DDL文件的命令行工具。

+0

謝謝 - 我會給SMOscript一看! – 2009-11-04 21:33:49