【问题标题】:How to view the stored procedure code in SQL Server Management Studio如何在 SQL Server Management Studio 中查看存储过程代码
【发布时间】:2012-01-04 19:52:49
【问题描述】:

我是 SQL Server 的新手。我通过 SQL Server Management Studio 登录到我的数据库。

我有一个存储过程列表。如何查看存储过程代码?

右击存储过程没有view contents of stored procedure之类的选项。

谢谢。

【问题讨论】:

  • 你必须“修改”它。

标签: sql-server tsql ssms


【解决方案1】:

我想这是查看存储过程代码的更好方法:

sp_helptext <name of your sp>

【讨论】:

  • 这种方法在结果显示为文本 (Ctrl+T keyboard shortcut) 时效果最佳。
  • @FlorinDumitrescu - 我更喜欢让它保持网格模式并执行以下操作,这非常快,现在对我来说是第二自然:sp_helptext YourSPName,F5,单击标题列“Text”,ctrl- c、单击查询中的任意位置,ctrl-a、ctrl-v、ctrl-home、ctrl-r。我喜欢这个的原因是我得到了语法高亮,我不必滚动到文件的开头。 (而且它比 ctrl-t 稍微好一点,因为它不会在文件前面加上“text ---------------”。)
【解决方案2】:

右击存储过程并选择Script Stored Procedure as |创建到 |新的查询编辑器窗口/剪贴板/文件

你也可以在存储过程上右击修改

对于多个过程,单击 Stored Procedures 文件夹,按 F7 打开“对象资源管理器详细信息”窗格,按住 Ctrl 并单击以选择所有您想要的,然后右键单击并选择 Script Stored Procedure as |创建到

【讨论】:

  • 当我只是查看过程时,我更喜欢“脚本存储过程作为 CREATE”而不是“修改”,因此我不会意外更改过程。
【解决方案3】:

这个选项叫做Modify:

这将在一个新的查询窗口中向您显示存储过程的 T-SQL 代码,并带有 ALTER PROCEDURE ... 前导,因此您可以轻松更改或修改您的过程并更新它

【讨论】:

  • 如果修改被禁用?我没有修改权限
【解决方案4】:

这是查看存储过程定义的另一种方式

SELECT OBJECT_DEFINITION (OBJECT_ID(N'Your_SP'))

【讨论】:

  • 上面的不会给出整个程序脚本
  • @Smart003,是的。如果您在将所有字符显示为网格结果时遇到困难,请参阅stackoverflow.com/questions/11897950/…
  • 谢谢 - 当存储库锁定以进行更新/处理时非常有用。
【解决方案5】:

使用这个查询:

SELECT object_definition(object_id) AS [Proc Definition]
FROM sys.objects 
WHERE type='P'

【讨论】:

    【解决方案6】:

    建议使用对象资源管理器并将存储过程编写到新的查询编辑器窗口的其他答案以及其他查询都是可靠的选择。

    我个人喜欢使用下面的查询来检索单行中的存储过程定义/代码(我使用的是 Microsoft SQL Server 2014,但看起来这应该适用于 SQL Server 2008 及更高版本)

    SELECT definition 
    FROM sys.sql_modules 
    WHERE object_id = OBJECT_ID('yourSchemaName.yourStoredProcedureName')
    

    有关 sys.sql_modules 的更多信息:

    https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-sql-modules-transact-sql

    【讨论】:

    • 似乎是最好的解决方案,因为其他所有方法都会破坏定义中的长行。但是它不考虑重命名的模块:``` create procedure dbo.SpRenameDemo as go exec sp_rename @objname=N'dbo.SpRenameDemo' , @newname=N'SpRenameDemo_Oops'; go select * from sys.sql_modules where object_id=object_id(N'dbo.SpRenameDemo'); select * from sys.sql_modules where object_id=object_id(N'dbo.SpRenameDemo_Oops'); ```
    【解决方案7】:

    exec sp_helptext 'your_sp_name' -- 不要忘记引号

    默认情况下,在管理工作室中,结果以网格视图显示。如果您想在文本视图中查看它,请转到:

    查询 --> 结果到 --> 结果到文本

    或 CTRL + T 然后执行。

    【讨论】:

      【解决方案8】:

      您可以使用此查询查看存储在数据库中的所有对象代码:

          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)
      

      【讨论】:

        【解决方案9】:

        如果您没有“修改”权限,您可以安装一个名为“SQL Search”的免费工具(由 Redgate 提供)。我用它来搜索我知道将在 SP 中出现的关键字,它会返回 SP 代码的预览,其中突出显示了关键字。

        巧妙!然后我将此代码复制到我自己的 SP 中。

        【讨论】:

          【解决方案10】:

          这是更好的方法:

          SELECT object_definition(object_id)
          FROM sys.objects 
          WHERE type='p' and name='SP_Name'
          

          【讨论】:

          • 这是我正在寻找的答案。我在服务器和本地数据库中有多个存储过程。我正在使用此查询来重新创建存储过程。 SELECT name,object_definition(object_id) FROM sys.objects WHERE type='p' and name LIKE'sp_%'
          猜你喜欢
          • 2011-12-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-27
          • 2010-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多