快速修改MS SQL存储过程的方法

4

我需要经常编辑Microsoft SQL存储过程,但传统方法(打开MSSMS -> 展开数据库树、展开存储过程树并按SP名称定义过滤器)非常耗时。我在寻找一种命令行方式,类似于"sp_helptext",但是可以为我实际打开存储过程进行编辑。

谢谢。


5
使用EXEC sp_HelpText '存储过程名称'命令。复制结果并粘贴到ssms中,使用Alter Procedure修改存储过程。但是,最好的选项是在“存储过程文件夹”的“筛选器”设置中进行筛选。 - praveen
1
脚本化并保存到文件,将其保存在桌面上 :o - WKordos
1
为什么你要直接编辑存储过程呢?你应该使用源代码控制中的SQL脚本进行工作,这样你就可以打开脚本,编辑它,然后执行它来修改存储过程。根据你所喜欢的工具和源代码控制系统,有很多方法可以做到这一点,但是直接编辑数据库对象是一个非常糟糕的想法。 - Pondlife
7个回答

3

没有直接的命令就像

MODIFY dbname.schemaname.spname

除了传统的使用SSMS的GUI方式外,您还有3个可使用TSQL的选项

EXEC sp_helptext dbname.schemaname.spname';

SELECT OBJECT_DEFINITION (OBJECT_ID(dbname.schemaname.spname'));

SELECT definition
FROM sys.sql_modules
WHERE object_id = (OBJECT_ID(dbname.schemaname.spname'));

不幸的是,所有这些选项都会导致格式丢失。

您正在尝试混合使用两种技术。

  1. SQL和SQLSyntax
  2. SQL管理工具

可能无法使用TSQL来操作 Management Studio,这似乎是您想要的。恐怕只有剪切和粘贴是您唯一的选择。

Raj


3

有一种方法:我开发了SSMSBoost-用于SSMS的插件。它允许直接从SQL编辑器中打开对象脚本。

  1. 在SQL编辑器中将光标放在存储过程名称上

  2. 按下F2,存储过程将以新窗口的形式呈现出来。

按下Ctrl-F2可以定位对象在对象资源管理器树中的位置,这样您就可以使用进一步的SSMS命令通过右键单击它。

希望这可以帮助到您。


我更喜欢开源工具。你知道有哪些吗? - Omtechguy
1
有一些开源的插件,但它们不能满足这个问题中所要求的功能。我的插件不是开源的,但目前可以免费使用。 - Andrei Rantsevich

1

请查看Redgate SQL Prompt。使用此工具,您可以右键单击存储过程的名称,然后单击“ALTER”。

RED GATE SQL PROMPT


我发现有时候 RED GATE 显示的是它缓存中的内容,而不是最新版本的内容... 可能是因为我使用的是旧版本。 - Omtechguy
有一个“刷新建议”的按钮,我经常会点一下。 - UnitStack
如果您尝试实验性功能(可以在SQL Prompt菜单中找到),则可以启用自动刷新建议选项。 - David Atkinson

0
使用这个。
SELECT ROUTINE_DEFINITION from INFORMATION_SCHEMA.ROUTINES
where ROUTINE_NAME = 'YourStoredProcedureName'

希望这能有所帮助。

0
如果你决定忽略关于源代码控制的建议,一个相对快速的方法是在你的桌面上创建一个可以轻松启动的.sql文件,其中包含以下内容。
SELECT o.name, m.definition AS [Copy This Definition], o.type_desc, o.create_date, o.modify_date 
FROM sys.sql_modules m INNER JOIN sys.objects o ON m.object_id = o.object_id
WHERE o.name='the_SP_in_question' -- <<<<<< SP/Func to search for

在按F5之前根据需要编辑存储过程名称,然后将结果中的定义复制到新查询中。当然,要将CREATE更改为ALTER

遗憾的是,微软还没有提供标准命令来执行此操作,它会有其用途。


0

以下是您可以使用的代码,用于运行sp_helptext过程,该过程将返回一张行表,您可以将其写入文件中,以创建存储过程。然后,您可以将文件名传递到SSMS命令行中,以便在打开SQL Server管理器时直接打开该文件。

例如) Ssms tempFile.sql

using (SqlConnection con = new SqlConnection ("Connection String Here"))
{
    using (SqlCommand cmd = con.CreateCommand())
    {
        cmd.CommandText = "sp_helptext @procName";
        cmd.CommandType = CommandType.Text;

        cmd.Parameters.AddWithValue("procName", "Name Of Stored Proc Here");

        con.Open(); 

        using (SqlDataReader rdr = cmd.ExecuteReader())
        {
            while (rdr.Read())
            {
                /* 
                You will get the CREATE PROC text here
                Do what you need to with it. For example, write
                to a .sql file
                */
            }
        }
    }
}

0

永远不要使用SSMS(或SSMS插件)来为更改脚本存储过程。应该直接从源代码控制中打开存储过程。如果您没有将这些对象放入源代码控制中,则需要这样做。存储过程是代码,需要像其他代码一样对待。从源代码控制系统外部编写的存储过程脚本是不负责任的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接