在sql server中有一个存储过程sp_rename
,允许重命名表,数据库,列等。假设我使用此表有表SomeTable
和存储过程:
create procedure get_temp
as
begin
select *
from SomeTable
end
如果我执行以下代码:
sp_rename 'SomeTable', 'SomeTable2'
我的表已重命名。但它的旧名称'SomeTable'保留在程序中,如果我尝试执行程序,我失败了。有没有办法在存储过程和函数中重命名它的名称,正确地重命名表(列,数据库等)?
答案 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 occurrences
和Search in comments and strings
在源代码(C#,Java等)中查找表/视图的外部引用(数据库外部)。 )