【问题标题】:Proper rename table in sql server在sql server中正确重命名表
【发布时间】:2017-09-24 08:49:28
【问题描述】:

在sql server中有一个存储过程sp_rename允许重命名表、数据库、列等。假设我有表SomeTable和使用这个表的存储过程:

create procedure get_temp
as
begin 
    select *
    from SomeTable      
end

如果我执行以下代码:

sp_rename 'SomeTable', 'SomeTable2' 

我的表已重命名。但是它的旧名称“SomeTable”保留在程序中,如果我尝试执行程序,我会失败。有没有办法通过在存储过程和函数中重命名表(列、数据库等)来正确重命名表?

【问题讨论】:

    标签: sql sql-server stored-procedures


    【解决方案1】:

    除了 Evaldas 提供的答案之外,至少有一个第三方工具可以协助此类操作。

    redgate 的 SQLPrompt 有一个名为 Smart Rename 的功能,它可以生成一个脚本来重命名一个对象并使用新名称更新对它的所有引用。

    来自 SQL Prompt 7 文档:

    SQL Prompt 可以创建一个脚本,允许您在不破坏依赖关系的情况下重命名数据库中的对象。您可以重命名以下内容:

    • 表格(包括列)

    • 视图(包括列)

    • 存储过程(包括参数)

    • 函数(包括参数)

    重命名对象时:

    • SQL Prompt 还会修改任何引用或被重命名对象引用的对象,以确保依赖关系链接不会中断。

    如果您之前使用 SQL Server Management Studio 或 Enterprise Manager Rename 或 T-SQL sp_rename 命令重命名了对象,则对象定义将包含原始名称。

    任何引用此原始名称的对象都不会更新。

    为了帮助您找到引用不再存在的对象的对象,请参阅查找无效对象。

    • 保留对象的原始权限和扩展属性。

    【讨论】:

      【解决方案2】:

      您可以使用免费工具 ApexSQL Refactor 来执行此操作。

      安装该工具后,在 SSMS 对象资源管理器中右键单击选定对象即可使用安全重命名选项。安全重命名窗口打开后,您可以输入新名称并单击重命名。

      这是一个视频教程,展示了如何执行此操作,其中还解释了一些其他选项: https://tv.apexsql.com/apexsql-refactor-how-to-safely-rename-database-objects-without-breaking-dependencies/

      【讨论】:

        【解决方案3】:

        不,没有。您可以创建同义词或视图以保持向后兼容性。

        【讨论】:

        • @Pupkin Documentation 例如CREATE SYNONYM MyProduct FOR AdventureWorks2012.Production.Product; 通过执行此操作,将创建一个对象(同义词),您可以查询旧表名来查询数据。这就像一个表的附加名称。
        【解决方案4】:

        不 - 很遗憾,您将不得不更新对您的表格的所有引用。

        【讨论】:

        【解决方案5】:

        虽然以下过程不能帮助您自动重命名所有引用,但它可以帮助找到实际引用并进行安全重构。

        如果在数据库浏览器中使用任何 JetBrain 的 IDE(如 DataGrip、Rider 或 IntelliJ IDEA),您可以:

        • 右键单击表格(或视图、列等)并单击Rename...(或按SHIFT + F6
        • 在“重命名”对话框中,打开Search in loaded resources 选项
        • 然后点击Preview按钮

        您将获得要重命名的表/视图的用法列表,最后可以从那里逐项进行重构。

        (可选)在“重命名”对话框中,您还可以选择 Search for text occurrencesSearch in comments and strings 在源代码(C#、Java 等)中查找对表/视图的外部引用(数据库外部)

        【讨论】:

          猜你喜欢
          • 2011-07-17
          • 1970-01-01
          • 1970-01-01
          • 2015-07-15
          • 2011-02-20
          • 1970-01-01
          • 2010-11-18
          • 1970-01-01
          • 2010-09-23
          相关资源
          最近更新 更多