前一段时间创建了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(!)名称。你知道这是由什么造成的,怎么能解决这个问题?
答案 0 :(得分:1)
至少有两个原因,你不应该重命名你的对象。
如果您使用T_SQL命令而不是GUI(您在管理工作室中点击"所有这些都在幕后生成T-SQL同上),您将收到警告,你可以在BOL文章中看到: sp_rename (Transact-SQL)
注意更改对象名称的任何部分都可能会破坏脚本并进行存储 程序。我们建议您不要使用此语句重命名 存储过程,触发器,用户定义的函数或视图; 相反,删除对象并使用新名称重新创建它。
这是重命名的第一个原因。 滚动文章找到备注部分:
重命名存储过程,函数,视图或触发器 不更改定义中相应对象名称的名称 sys.sql_modules目录视图的列。因此,我们建议 sp_rename不能用于重命名这些对象类型。相反,放弃 并使用新名称重新创建对象。
这是第二次。
因此,当你想要重命名你的程序时,你应该将你的程序编写为CREATE脚本并更改程序名称,这样你就可以用新名称重新创建proc,然后你可以删除旧程序