4

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

谢谢。

4

7 回答 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 和 SQL 语法
  2. SQL 管理工具

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

拉吉

于 2013-01-29T11:07:13.917 回答
3

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

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

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

点击 Ctrl-F2 将在对象资源管理器树中定位对象,因此您可以使用更多 SSMS 命令右键单击它。

希望这可以帮助。

于 2013-01-30T09:59:53.803 回答
1

查看 Redgate SQL 提示。有了这个,您可以右键单击 Stored Proc 的名称,然后单击“ALTER”

红门 SQL 提示

于 2013-01-29T11:23:03.713 回答
0

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

例如)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
                */
            }
        }
    }
}
于 2016-01-18T18:25:46.433 回答
0

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

于 2016-01-18T18:52:01.363 回答
0

用这个

SELECT ROUTINE_DEFINITION from INFORMATION_SCHEMA.ROUTINES
where ROUTINE_NAME = 'YourStoredProcedureName'

希望这可以帮助。

于 2018-02-26T04:35:02.967 回答
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 之前根据需要编辑 SP 名称,然后将结果中的定义复制到新查询中。并更改CREATEALTER当然。

遗憾的是,MS 还没有为此提供标准命令,它会有它的用途。

于 2018-10-23T10:22:58.467 回答