sp_helptext中过程的旧名称

时间:2017-05-23 08:08:06

标签: sql-server stored-procedures

前一段时间创建了ALF_GetPopulationForPolygon_2_old程序。然后在SSMS中,它被重命名为(right mouse button -> rename)到过程ALF_GetPopulationForPolygon_2_old_FOR_DELETE_20170504。重命名正常传递,但结果是查询:

SELECT
    sm.definition
FROM
    sys.objects AS o
        INNER JOIN sys.sql_modules AS sm
        ON ( 1 = 1 )
           AND ( sm.object_id = o.object_id )
WHERE
    ( 1 = 1 )
    AND ( o.name like 'ALF_GetPopulationForPolygon_2_old_FOR_DELETE_20170504' )

调用存储过程:

EXEC sp_helpText 'ALF_GetPopulationForPolygon_2_old_FOR_DELETE_20170504'

返回以下文字:

...
CREATE PROCEDURE [dbo]. [ALF_GetPopulationForPolygon_2]
...

那些显示过程的OLD(!)名称。你知道这是由什么造成的,怎么能解决这个问题?

1 个答案:

答案 0 :(得分:1)

至少有两个原因,你不应该重命名你的对象。

如果您使用T_SQL命令而不是GUI(您在管理工作室中点击"所有这些都在幕后生成T-SQL同上),您将收到警告,你可以在BOL文章中看到: sp_rename (Transact-SQL)

  

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

这是重命名的第一个原因。 滚动文章找到备注部分:

  

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

这是第二次。

因此,当你想要重命名你的程序时,你应该将你的程序编写为CREATE脚本并更改程序名称,这样你就可以用新名称重新创建proc,然后你可以删除旧程序