我需要经常编辑 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,而这正是您想要的。恐怕剪切和粘贴是您唯一的选择。
拉吉
有一种方法:我开发 SSMSBoost - SSMS 插件。它允许直接从 SQL 编辑器打开对象脚本。
在 SQL 编辑器中将光标放在存储过程名称上
点击 F2,程序将在新窗口中编写脚本。
点击 Ctrl-F2 将在对象资源管理器树中定位对象,因此您可以使用更多 SSMS 命令右键单击它。
希望这可以帮助。
查看 Redgate SQL 提示。有了这个,您可以右键单击 Stored Proc 的名称,然后单击“ALTER”
下面是可用于运行 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
*/
}
}
}
}
永远不要使用 SSMS(或 SSMS 插件)为存储的过程编写脚本以进行更改。存储的过程应该始终直接从您的源代码管理中打开。如果源代码管理中没有这些对象,则需要这样做。SP 是代码,它们需要像其他代码一样对待。从源代码控制系统之外编辑sps脚本是不负责任的。
用这个
SELECT ROUTINE_DEFINITION from INFORMATION_SCHEMA.ROUTINES
where ROUTINE_NAME = 'YourStoredProcedureName'
希望这可以帮助。
如果您决定忽略此处关于源代码控制的建议,一种快速的方法是在您的桌面上创建一个您可以轻松启动的 .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 名称,然后将结果中的定义复制到新查询中。并更改CREATE
为ALTER
当然。
遗憾的是,MS 还没有为此提供标准命令,它会有它的用途。