【问题标题】:renaming stored procedures重命名存储过程
【发布时间】:2010-11-14 04:58:52
【问题描述】:

我在重命名存储过程时观察到以下特性。

sp_RENAME 'User_Validate', 'sp_UserValidate'

当我执行sp_helptext sp_UserValidate 时,我看到的程序名称是

CREATE PROCEDURE User_Validate  
(@userEmail nvarchar(200),  
@userPassword nvarchar(32))....  

为什么名称没有在存储过程中更新?

但是当我检查时

select * from sys.procedures

我发现名称字段正在更新?背后的原因是什么?我能得出的唯一合乎逻辑的结论是最好放弃该过程并使用新名称重新创建。

编辑 1: 如果我这样做 sp_helptext User_Validate 它会返回“对象 'User_Validate' 在数据库 'Process' 中不存在或对于此操作无效。”但是当我查看存储过程时,名称 User_Validate 仍然存在。

注意:我知道重命名存储过程不是一个好习惯,我问这个问题是出于好奇。

【问题讨论】:

    标签: sql-server stored-procedures


    【解决方案1】:

    sp_helptext 不对过程进行逆向工程,它只是显示创建过程的原始 T-SQL 批处理,包括 cmets 和空格。

    【讨论】:

    • 我使用 sp_helptext 查看过程以及使用它的原因是为了强调这样一个事实,即当我使用 sp_helptext 查看存储过程(代码)的样子时,我发现了程序没有改变。如果我假设 sp_helptext 执行一些天上的功能而不是检查文件的上下文,那将是愚蠢的。我的问题是,为什么程序中的名称没有改变?
    • 在理想世界中sp_rename 可以进入为原始批次保留的文本,对其进行解析,并替换过程名称。它只是没有,我想开发工作的投资回报太低了。
    【解决方案2】:

    不建议使用 sp_rename 重命名存储过程、视图、触发器和用户定义的函数

    您的结论是正确的,您应该删除并使用新名称重新创建它。 BOL 中也有相同的说明 - Rename a Stored Procedure

    您还应该检查dependencies of a stored procedure,因为重命名存储过程可能会导致依赖对象在未更新以匹配更改时失败

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2013-01-05
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-13
      • 1970-01-01
      相关资源
      最近更新 更多