在sql server中正确重命名表

时间:2017-04-26 19:23:12

标签: sql sql-server stored-procedures

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

create procedure get_temp
as
begin 
    select *
    from SomeTable      
end

如果我执行以下代码:

sp_rename 'SomeTable', 'SomeTable2' 

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

5 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

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

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

从SQL Prompt 7文档:

  

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

     
      
  • 表格(包括专栏)

  •   
  • 观点(包括列)

  •   
  • 存储过程(包括参数)

  •   
  • 功能(包括参数)

  •   
     

重命名对象时:

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

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

     

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

     

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

不 - 遗憾的是,您必须更新对表的所有引用。

答案 4 :(得分:0)

尽管以下过程无法帮助您自动重命名所有引用,但可以帮助您找到实际的引用并进行安全的重构。

如果在数据库资源管理器中使用任何JetBrain的IDE(例如DataGrip,Rider或IntelliJ IDEA),您可以:

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

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

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