如何在不使用UI的情况下在SQL SERVER 2008 R2中生成脚本?

Vik*_*ore 0 sql-server-2008 sql-server-2008-r2

您好我正在使用SQL SERVER 2008 R2,有人可以帮我生成一个脚本,如创建,更改,而不使用UI.

Aar*_*and 5

存储过程,视图,函数等都可以编写,sys.sql_modules只要它们不加密:

SELECT definition 
  FROM sys.sql_modules
  WHERE [object_id] = OBJECT_ID(N'dbo.object_name');
Run Code Online (Sandbox Code Playgroud)

或者,如果您想编写多个脚本:

SELECT definition + CHAR(13) + CHAR(10) + 'GO'
  FROM sys.sql_modules
  WHERE OBJECT_NAME([object_id]) IN (N'name1', N'name2', ...);
Run Code Online (Sandbox Code Playgroud)

或者全部:

SELECT '--' + QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))
  + '.' + QUOTENAME(OBJECT_NAME([object_id]))
  + CHAR(13) + CHAR(10) + definition 
  + CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10)
FROM sys.sql_modules
WHERE definition IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)

(当然,如果你在Management Studio中运行它们,并且任何超过输出字符串的最大长度,结果为文本约8K,这些都注定要失败.但听起来你想在其他地方使用它们.)

请注意,这不会编写创建对象时生效的SET设置的脚本,但您可以扩展此查询以包含类似ANSI_NULLSQUOTED_IDENTIFIER- 您可以从同一视图中获取的设置.

表格有点棘手.如果在分析器运行时在SSMS中生成脚本,您将看到它通过一系列查询执行此操作并在代码中构造create table脚本(换句话说,您无法嗅探它).它可能非常复杂,具体取决于您对表使用的选项,是否需要编写所有外键和依赖对象的脚本等.为此,我更喜欢在podiluska的答案中突出显示的SMO方法.

如果您已经在使用SSMS,那么我不明白不使用生成脚本菜单项的目的.如果单例方法是问题,则可以使用对象资源管理器详细信息而不是对象资源管理器对多个对象执行此操作:

在此输入图像描述