我需要经常编辑Microsoft SQL存储过程,我发现传统方式(Open MSSMS - >扩展数据库树,扩展存储过程树并按SP的名称定义过滤器)很长。我正在寻找一种方法(命令行),如“sp_helptext”,但这种方式实际上将为我打开存储过程进行编辑。
感谢。
答案 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'));
不幸的是,所有这些选项都会导致格式化。
您正在尝试将两种技术混合在一起。
可能无法使用TSQL来操作Management Studio,这就是您想要的。我担心剪切和粘贴是你唯一的选择。
拉吉
答案 1 :(得分:3)
有一种方法:我为SSMS开发SSMSBoost加载项。它允许直接从SQL编辑器打开对象脚本。
在SQL编辑器中将光标放在存储过程名称
点击F2,程序将在新窗口中编写脚本。
按Ctrl-F2可在对象资源管理器树中找到对象,因此您可以使用其他SSMS命令右键单击它。
希望这有帮助。
答案 2 :(得分:1)
查看Redgate 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还没有提供标准命令来执行此操作,所以它会有其用途。