在SQL Server中重命名存储过程

Pet*_*ert 24 sql sql-server sql-server-2008

我正在尝试使用sp_rename系统sproc重命名SQL Server 2008中的存储过程.第三个参数虽然给我带来了困难,但我仍然收到以下错误:

Msg 15249, Level 11, State 1, Procedure sp_rename, Line 75
Error: Explicit @objtype 'P' is unrecognized.
Run Code Online (Sandbox Code Playgroud)

正如消息所示,我正在传递P参数的值.我这样称呼sproc:

EXEC sp_rename @objName = @procName, @newname = @WrappedName, @objtype = 'P';
Run Code Online (Sandbox Code Playgroud)

我仔细检查了文档,其中说这是来自sys.objects的值.我跑了以下来仔细检查我是不是疯了

select * from sys.objects where name = 'MySprocName'
Run Code Online (Sandbox Code Playgroud)

确实返回的类型是P.

有谁知道我应该通过什么?我不想把它留空,因为我正在创建一个通用的sproc来重命名任意的sprocs,如果sproc和其他东西之间有名称冲突,我不想担心这个.

Pie*_*ant 49

只需省略@objtype参数(默认为null)即可.

EXEC sp_rename 'sp_MyProc', 'sp_MyProcName'
Run Code Online (Sandbox Code Playgroud)

您将收到以下警告,但该过程将被重命名

警告:更改对象名称的任何部分可能会破坏脚本和存储过程.

与其他人一样,您应该删除并重新创建该过程.


JP *_*oto 17

根据文档,'P'不是一个正确的选择.你应该尝试'OBJECT',因为这似乎是你想要做的最接近的事情.但是,你应该留意这个警告......

更改对象名称的任何部分都可能会破坏脚本和存储过程.我们建议您不要使用此语句重命名存储过程,触发器,用户定义的函数或视图; 相反,删除对象并使用新名称重新创建它.

另外(来自同一个MSDN页面):

重命名存储过程,函数,视图或触发器不会更改sys.sql_modules目录视图的定义列中相应对象名称的名称.因此,我们建议不要使用sp_rename重命名这些对象类型.而是使用新名称删除并重新创建对象.