有没有办法可以找到存储过程的保存位置,以便我可以将文件复制到我的桌面?
4 回答
存储过程不存储为文件,它们存储为元数据,并sysschobjs
在目录视图sys.objects
、、sys.procedures
等中向我们 peons 公开(感谢 Michael 提醒) 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
。这将生成一个包含您选择的所有程序的文件。如果您希望每个程序都有一个文件,则可以通过一次仅选择一个程序来使用此方法,但这可能很乏味。您还可以使用此方法将所有与会计相关的程序编写到一个文件中,将所有与财务相关的程序编写到另一个文件中,等等。
为每个存储过程生成一个文件的更简单方法是使用生成脚本向导- 再次从对象资源管理器开始 - 右键单击您的数据库并选择Tasks > Generate scripts
. 选择Select specific database objects
并选中顶级Stored Procedures
框。点击下一步。对于输出选择Save scripts to a specific location
, Save to file
, 和Single file per object.
根据您的 SSMS 版本,这些步骤可能会略有不同。
存储过程不会“存储”为单独的文件,您可以在没有数据库的情况下自由浏览和阅读。它存储在它所属的一组系统表中的数据库中。包含定义的表称为 [sysschobjs],我们任何最终用户都无法(直接)访问它。
为了从数据库中检索这些存储过程的定义,我喜欢使用这个查询:
select definition from sys.sql_modules
where object_id = object_id('sp_myprocedure')
但我喜欢亚伦的回答。他提供了一些其他不错的选择。
这取决于您运行的 SQL Server 版本。对于最近的版本,存储过程的源代码可通过系统视图sys.sql_modules
获得,但获取存储过程或用户定义函数 (UDF) 源代码的更简单方法是使用系统函数object_definition()
(视图定义sys.ssql_modules
使用):
select object_definition( object_id('dbo.my_stored_procedure_or_user_defined_function') )
在旧版本中,存储过程和 UDF 可通过现已弃用的 view system view 获得sys.syscomments
。
在旧版本的 SQL Server 中,它可以通过系统表 `dbo.syscomments' 获得
应该注意的是,根据您的访问权限和数据库的配置方式,您可能无法使用源或者它可能已加密,这使得它不是非常有用。
您还可以使用SMO
(Sql Server 管理对象)以编程方式获取源代码。
http://technet.microsoft.com/en-us/library/hh248032.aspx
我最近遇到了以编程方式将存储过程脚本提取到文件的问题。我开始使用routine_definition 方法,但很快意识到我达到了4000 个字符的限制......无论我尝试什么,我都找不到克服这个困难的方法。(仍然有兴趣知道是否有办法解决这个问题!)
相反,我偶然发现了一个强大的内置助手。sp_helptext
简而言之,为了提取存储过程脚本,特别是 sp_helptext 将每一行提取到输出中的一行。即,2000 行代码 = 返回数据集中的 2000 行。只要您的单行不超过 4000 个字符的限制,就不会剪裁任何内容。
当然,你可以很容易地将整个表内容写入文件,无论是在 SQL 中,还是在我的例子中是 SSIS。