t-sql存储过程创建脚本

sta*_*ser 15 t-sql sql-server stored-procedures sql-server-2008

我有一堆存储过程名称.我想导出每个存储过程的创建脚本.最好的方法是什么?

现在我在SSMS中手动选择存储过程并选择"Script stored procedure as -> Drop and Create to".这似乎很乏味.我希望有更好的方法来解决这个问题.谢谢.

mar*_*c_s 22

您可以在对象资源管理器中右键单击数据库,然后执行"任务">"生成脚本".

alt text http://i25.tinypic.com/2khmr8.png

这允许您选择要编写脚本的一大堆对象(例如,表,视图,存储过程),并且可以将它们存储到单个大型SQL文件中,或者每个对象存储一个SQL文件.工作真的很好!

更新:如果要在SQL Server Management Studio应用程序中执行此操作,可以使用此SQL脚本查找存储的过程及其定义 - 但是,您无法将SQL Server Mgmt Studio写入磁盘,而不是工作 - 但您可以将结果复制到Excel中.

SELECT 
    pr.name ,
    pr.type_desc ,
    pr.create_date ,
    mod.definition
FROM sys.procedures pr
INNER JOIN sys.sql_modules mod ON pr.object_id = mod.object_id
WHERE pr.Is_MS_Shipped = 0
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.正是我在寻找什么. (3认同)

Mar*_*ith 9

要编写符合特定条件的所有符号,您可以使用类似下面的内容.

DECLARE @t VARCHAR(max) = '';
SELECT @t = @t +
 'If OBJECT_ID(''' + QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + '.' +  QUOTENAME(OBJECT_NAME(object_id)) + ''',''p'') IS NOT NULL
    DROP PROCEDURE ' + QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + '.' +  QUOTENAME(OBJECT_NAME(object_id)) + '
GO

SET ANSI_NULLS '
            + CASE
                WHEN uses_ansi_nulls = 1 THEN 'ON'
                ELSE 'OFF'
              END
            + '
GO

SET QUOTED_IDENTIFIER '
            + CASE
                WHEN uses_quoted_identifier = 1 THEN 'ON'
                ELSE 'OFF'
              END
            + '
GO

' + definition + ' 
GO

'
FROM   [sys].[sql_modules]
WHERE  OBJECTPROPERTY (object_id,'IsProcedure' )=1
       AND OBJECT_NAME(object_id) LIKE '%some_patttern%'


/*Stops the long text from getting truncated in SSMS*/
SELECT @t AS [processing-instruction(x)]
FOR XML PATH('') 
Run Code Online (Sandbox Code Playgroud)