Sql server 如何在SQLServerManagementStudio中查看存储过程代码
我是SQL Server新手。我通过SQL Server Management Studio登录到数据库 我有一个存储过程列表。如何查看存储过程代码 右键单击存储过程没有任何选项,如查看存储过程的内容Sql server 如何在SQLServerManagementStudio中查看存储过程代码,sql-server,tsql,ssms,Sql Server,Tsql,Ssms,我是SQL Server新手。我通过SQL Server Management Studio登录到数据库 我有一个存储过程列表。如何查看存储过程代码 右键单击存储过程没有任何选项,如查看存储过程的内容 谢谢。右键单击存储过程并选择将存储过程脚本为|创建到|新查询编辑器窗口/剪贴板/文件 右键单击存储过程时,也可以执行修改操作 要同时执行多个过程,请单击存储过程文件夹,点击F7打开对象资源管理器详细信息窗格,按住Ctrl键并单击以选择所需的所有过程,然后右键单击并选择将存储过程脚本为|创建为该选项
谢谢。右键单击存储过程并选择将存储过程脚本为|创建到|新查询编辑器窗口/剪贴板/文件 右键单击存储过程时,也可以执行修改操作
要同时执行多个过程,请单击存储过程文件夹,点击F7打开对象资源管理器详细信息窗格,按住Ctrl键并单击以选择所需的所有过程,然后右键单击并选择将存储过程脚本为|创建为该选项称为
修改
:
这将在一个新的查询窗口中显示存储过程的T-SQL代码,带有一个
ALTER procedure…
引入项,因此您可以轻松地更改或修改您的过程并更新它如果您没有“修改”权限,您可以安装一个名为“SQL搜索”的免费工具(由Redgate提供)。我使用它来搜索我知道将在SP中的关键字,它返回SP代码的预览,并突出显示关键字
别出心裁!然后我将此代码复制到自己的SP中。我想这是查看存储过程代码的更好方法:
sp_helptext <name of your sp>
sp\u帮助文本
使用此查询:
SELECT object_definition(object_id) AS [Proc Definition]
FROM sys.objects
WHERE type='P'
USE [test] --Database Name
SELECT
sch.name+'.'+ob.name AS [Object],
ob.create_date,
ob.modify_date,
ob.type_desc,
mod.definition
FROM
sys.objects AS ob
LEFT JOIN sys.schemas AS sch ON
sch.schema_id = ob.schema_id
LEFT JOIN sys.sql_modules AS mod ON
mod.object_id = ob.object_id
WHERE mod.definition IS NOT NULL --Selects only objects with the definition (code)
这是查看存储过程定义的另一种方式
SELECT OBJECT_DEFINITION (OBJECT_ID(N'Your_SP'))
exec sp_帮助文本“您的sp_名称”-不要忘记引号 在ManagementStudio中,默认情况下,结果显示在网格视图中。如果要在文本视图中查看,请转到: 查询-->结果到-->结果到文本
或CTRL+T,然后执行。建议使用对象资源管理器并将存储过程脚本化到新的查询编辑器窗口和其他查询的其他答案都是可靠的选项 我个人喜欢使用下面的查询在一行中检索存储过程定义/代码(我使用的是Microsoft SQL Server 2014,但看起来这应该适用于SQL Server 2008及更高版本) 有关sys.sql\u模块的更多信息:
您可以通过此查询查看数据库中存储的所有对象代码:
SELECT object_definition(object_id) AS [Proc Definition]
FROM sys.objects
WHERE type='P'
USE [test] --Database Name
SELECT
sch.name+'.'+ob.name AS [Object],
ob.create_date,
ob.modify_date,
ob.type_desc,
mod.definition
FROM
sys.objects AS ob
LEFT JOIN sys.schemas AS sch ON
sch.schema_id = ob.schema_id
LEFT JOIN sys.sql_modules AS mod ON
mod.object_id = ob.object_id
WHERE mod.definition IS NOT NULL --Selects only objects with the definition (code)
这是更好的方法:
SELECT object_definition(object_id)
FROM sys.objects
WHERE type='p' and name='SP_Name'
您必须“修改”它。当我只是查看过程时,我更喜欢“将存储过程作为创建脚本”而不是“修改”,这样我就不会意外地更改过程。当结果显示为文本()时,这种方法最有效@FlorinDumitrescu-我更喜欢将其保持在网格模式,并执行以下操作,速度极快,现在是我的第二天性:sp_helptext YourSPName,F5,单击标题栏“Text”,ctrl-c,单击查询中的任意位置,ctrl-a,ctrl-v,ctrl-home,ctrl-r。我喜欢这样做的原因是我可以突出显示语法,并且不必滚动到文件的开头。(它比ctrl-t稍微好一点,因为它不会在文件前面加上“text--------------------”)如果禁用了modify?我没有修改的权限上面的一个不会给出整个过程script@Smart003,是的。如果您在将所有字符显示为网格结果时遇到困难,请参阅此感谢-在存储库锁定以进行更新/处理时非常有用。这似乎是最好的解决方案,因为每种其他方法都会损坏定义中的长行。但是,它不考虑重命名的模块:``将过程dbo.SpRenameDemo创建为go exec sp_rename@objname=N'dbo.SpRenameDemo',@newname=N'SpRenameDemo_Oops';从sys.sql_模块中选择*,其中object_id=object_id(N'dbo.SpRenameDemo');从sys.sql_模块中选择*,其中object_id=object_id(N'dbo.SpRenameDemo_Oops')```