如何将存储过程编写成文件脚本?

Hot*_*ndy 10 sql sql-server

有没有办法可以找到保存存储过程的位置,以便我可以将文件复制到桌面?

Aar*_*and 39

存储过程不会作为文件存储,他们作为元数据存储和暴露给我们的苦工(感谢迈克尔有关的提醒sysschobjs)在目录视图sys.objects,sys.procedures,sys.sql_modules,等对于个人存储过程,你可以直接使用查询定义这些观点(最重要的sys.sql_modules.definition)或使用尼古拉斯指出OBJECT_DEFINITION()功能(虽然他的描述并不完全准确).syscomments

要将所有存储过程提取到单个文件,一个选项是打开对象资源管理器,展开your server > databases > your database > programmability并突出显示该stored procedures节点.然后点击F7(查看> 对象资源管理器详细信息)在右侧,选择所需的所有步骤,然后单击鼠标右键script stored procedure as > create to > file.这将生成一个包含您选择的所有过程的文件.如果您希望每个过程都有一个文件,那么您可以通过一次只选择一个过程来使用此方法,但这可能很乏味.您还可以使用此方法将所有与会计相关的过程编写为一个文件,将所有与财务相关的过程编写为另一个文件,等等.

每个存储过程只生成一个文件的简单方法是使用Generate Scripts向导 - 再次从Object Explorer开始 - 右键单击​​数据库并选择Tasks > Generate scripts.选择Select specific database objects并选中顶级Stored Procedures框.点击下一步.对于输出选择Save scripts to a specific location,Save to fileSingle file per object.

根据您的SSMS版本,这些步骤可能略有不同.


Mic*_*art 5

存储过程不是作为一个单独的文件“存储”的,您无需数据库即可自由浏览和阅读。它存储在它属于一组系统表的数据库中。包含定义的表称为[sysschobjs],我们中的任何最终用户甚至都无法(直接)访问。

要从数据库中检索这些存储过程的定义,我喜欢使用以下查询:

select definition from sys.sql_modules 
where object_id = object_id('sp_myprocedure')
Run Code Online (Sandbox Code Playgroud)

但是我喜欢亚伦的回答。他还提供了其他一些不错的选择。