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

时间:2013-01-29 10:18:00

标签: sql-server stored-procedures ssms

我需要经常编辑Microsoft SQL存储过程,我发现传统方式(Open MSSMS - >扩展数据库树,扩展存储过程树并按SP的名称定义过滤器)很长。我正在寻找一种方法(命令行),如“sp_helptext”,但这种方式实际上将为我打开存储过程进行编辑。

感谢。

6 个答案:

答案 0 :(得分: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管理工具
  3. 可能无法使用TSQL来操作Management Studio,这就是您想要的。我担心剪切和粘贴是你唯一的选择。

    拉​​吉

答案 1 :(得分:3)

有一种方法:我为SSMS开发SSMSBoost加载项。它允许直接从SQL编辑器打开对象脚本。

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

  2. 点击F2,程序将在新窗口中编写脚本。

  3. 按Ctrl-F2可在对象资源管理器树中找到对象,因此您可以使用其他SSMS命令右键单击它。

    希望这有帮助。

答案 2 :(得分:1)

查看Redgate SQL Prompt。通过此操作,您可以右键单击存储过程的名称,然后单击“更改”

RED GATE SQL PROMPT

答案 3 :(得分:0)

以下是可用于运行sp_helptext过程的代码,该过程将返回一个行表,您可以将这些行写入将创建存储过程的文件。然后,您可以将文件名传递到SSMS命令行,以便在sql server manager打开时直接打开该文件。

  

ex)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
                */
            }
        }
    }
}

答案 4 :(得分:0)

不要使用SSMS(或SSMS加载项)来编写存储过程的脚本以进行更改。应始终直接从源代码管理中打开存储过程。如果您没有在源代码管理中拥有这些对象,那么您需要这样做。 SP是代码,它们需要像其他代码一样对待。编辑源代码控制系统外部编写的sps是不负责任的。

答案 5 :(得分: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-ing操作之前,根据需要编辑SP名称,然后将结果中的定义复制到新查询中。然后将CREATE更改为ALTER

可惜的是,MS还没有提供标准命令来执行此操作,所以它会有其用途。