我需要经常编辑Microsoft SQL存储过程,但传统方法(打开MSSMS -> 展开数据库树、展开存储过程树并按SP名称定义过滤器)非常耗时。我在寻找一种命令行方式,类似于"sp_helptext",但是可以为我实际打开存储过程进行编辑。
谢谢。
我需要经常编辑Microsoft SQL存储过程,但传统方法(打开MSSMS -> 展开数据库树、展开存储过程树并按SP名称定义过滤器)非常耗时。我在寻找一种命令行方式,类似于"sp_helptext",但是可以为我实际打开存储过程进行编辑。
谢谢。
没有直接的命令就像
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'));
不幸的是,所有这些选项都会导致格式丢失。
您正在尝试混合使用两种技术。
可能无法使用TSQL来操作 Management Studio,这似乎是您想要的。恐怕只有剪切和粘贴是您唯一的选择。
Raj
有一种方法:我开发了SSMSBoost-用于SSMS的插件。它允许直接从SQL编辑器中打开对象脚本。
在SQL编辑器中将光标放在存储过程名称上
按下F2,存储过程将以新窗口的形式呈现出来。
按下Ctrl-F2可以定位对象在对象资源管理器树中的位置,这样您就可以使用进一步的SSMS命令通过右键单击它。
希望这可以帮助到您。
请查看Redgate SQL Prompt。使用此工具,您可以右键单击存储过程的名称,然后单击“ALTER”。
SELECT ROUTINE_DEFINITION from INFORMATION_SCHEMA.ROUTINES
where ROUTINE_NAME = 'YourStoredProcedureName'
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
。
遗憾的是,微软还没有提供标准命令来执行此操作,它会有其用途。
以下是您可以使用的代码,用于运行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
*/
}
}
}
}
永远不要使用SSMS(或SSMS插件)来为更改脚本存储过程。应该直接从源代码控制中打开存储过程。如果您没有将这些对象放入源代码控制中,则需要这样做。存储过程是代码,需要像其他代码一样对待。从源代码控制系统外部编写的存储过程脚本是不负责任的。
EXEC sp_HelpText '存储过程名称'
命令。复制结果并粘贴到ssms中,使用Alter Procedure
修改存储过程。但是,最好的选项是在“存储过程文件夹”的“筛选器”设置中进行筛选。 - praveen