首页 > 其他 > 详细

谨慎使用sp_rename修改任何对象名

时间:2019-06-28 23:53:02      阅读:229      评论:0      收藏:0      [点我收藏+]

原文链接:http://www.lmwlove.com/ac/id820

我们在修改sqlserver数据库中对象名称的时候,可能会比较喜欢使用sp_rename系统存储过程来操作,因为使用它比起到可视化列表中去找对象,速度要快的多。但为什么我们不提倡使用它呢,因为使用它可能会带来一些麻烦。而且,在使用它更改对象名时,数据库本身也会给出如下警告:
警告: 更改对象名的任一部分都可能会破坏脚本和存储过程。

我们现在来做一个简单的测试,先创建一个简单的存储过程:

create procedure usp_test
as
begin
select 1
end


我们不去研究这个存储过程的功能与语法, 因为这个不是本章的重点。

然后使用sp_rename来修改usp_test的名称

sp_rename ‘usp_test‘,‘usp_test_1‘


系统提示警告:
警告: 更改对象名的任一部分都可能会破坏脚本和存储过程。但名称是已经被修改掉了。

这时候,我们从企业管理器的存储过程列表中看到存储过程‘usp_test‘的名称已经修改成‘usp_test_1‘了。而且,我们在右键中选择->修改,查看到的脚本中的名称也已经存为‘usp_test_1‘,定义如下:
ALTER procedure [dbo].[usp_test_1]
as
begin
select 1
end
但我们在使用sp_helptext系统存储过程来查看定义,会发现通过这个方法查到的定义,名称并没有更改过来

sp_helptext usp_test_1


返回结果如下:
create procedure usp_test  
as  
begin  
select 1  
end
在sys.sql_modules表中definition列的定义也没有修改过来

select definition from  sys.sql_modules  where object_id=object_id(‘usp_test_1‘)


返回结果如下:
create procedure usp_test  as  begin  select 1  end

从这个测试中可以看出,们在修改数据库中对象的名称的时候,可能会造中数据库中该对象的定义不同步。这可能会导致一些错误的发生,如下面的链接所造成的问题,也就是由于该原因产生的。

纠错:
经再次测试后发现,不光是使用sp_name来修改对象名会造成该问题,通过任何方式修改对象名都会存在该问题。看来,我们在修改对象的名称时要谨慎了。

谨慎使用sp_rename修改任何对象名

原文:https://www.cnblogs.com/donelyorjune/p/11105078.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!