2009-10-02 47 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