一尘不染

重命名列而不破坏脚本和存储过程

sql

我想将列名修改为表中存在的新名称

但这里的问题我想手动修改或中的column name礼物。Triggers``SP's

有没有更好的方法可以做到这一点。

rename一列正在使用此

sp_RENAME 'Tablename.old_Column', 'new_column' , 'COLUMN';

我同样如何为做到这一点triggers还是SP's?没有打开每个脚本?


阅读 118

收藏
2021-03-10

共1个答案

一尘不染

好吧,有很多第三方工具都承诺使用这种类型的“安全重命名”工具,其中一些是免费的,而有些则不是:

  • MWillemse在回答中写道,ApexSQL为此提供了一个免费工具
  • RedGate有一个称为SQLPrompt的商业工具,该工具也具有安全的重命名功能,但是,它远非免费的。
  • 正如Dan Guzman在评论中所写的那样,Microsoft有一个称为SQLServer数据工具(简称为SSDT)的可视工作室加载项。

我不得不说我从未针对这些特定任务尝试过任何这些特定工​​具,但是我确实对SSDT和RedGate的某些产品有一定的经验,我认为它们是非常好的工具。我对ApexSQL一无所知。

另一个选择是尝试自己编写sql脚本,但是在开始之前要考虑以下两点:

  • 可以直接从sql server外部访问您的表吗?我的意思是,是否有可能某些软件直接在该表上执行sql语句?如果是这样,则在重命名该列时可能会破坏它,并且在这种情况下没有SQL工具会有所帮助。
  • 您的sql脚本编写技能真的那么好吗?我认为自己对sql Server有相当的经验,但是我认为编写这样的脚本超出了我的技能范围。并非对我来说这是不可能的,但我可能会花太多时间和精力才能免费获得某些东西。

如果您决定自己编写它,那么有一些文章可能会帮助您完成该任务:

首先,是sys.sql_expression_dependencies的Microsoft官方文档。
其次,由13年经验的DBA撰写的一篇名为《寻找SQL
Server对象依赖关系的不同方法》
的文章,最后但并非最不重要的一点,StackExchange数据库管理员网站上的一个相关问题

当然,您可以采用Gordon Linoff在他的注释中建议的安全方式,或者使用他的答案中建议的诸如destination-
data之类的同义词,但是随后您将不得不手动修改所有列依赖关系,并且据我所知,这就是您要避免的事情。

2021-03-10