zoukankan      html  css  js  c++  java
  • 谨慎使用sp_rename修改任何对象名

    原文链接: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来修改对象名会造成该问题,通过任何方式修改对象名都会存在该问题。看来,我们在修改对象的名称时要谨慎了。

  • 相关阅读:
    误删除pycharm项目中的文件,如何恢复?
    Python/PHP 远程文件/图片 下载
    Python 字节与字符串的转换
    Python中的Json模块dumps、loads、dump、load函数介绍
    Python 连接数据库失败
    Python 模块搜索路径
    Python 操作 PostgreSQL 数据库
    从shell(终端)中退出python
    URL 传参中需要处理的特殊字符
    PHP 命名空间和自动加载
  • 原文地址:https://www.cnblogs.com/donelyorjune/p/11105078.html
Copyright © 2011-2022 走看看