你能给SQL列名称一个'第二个名字'为了重构目的?

时间:2014-08-15 10:39:41

标签: sql database entity-framework azure-sql-database

在一个非常敏捷的项目开发中,频繁更新最棘手的问题是重构表和列命名。

当我们处理高风险的代码时,我们可以在Production数据库中添加一个列或一个表,并继续处理实际数据 - 省略更新脚本的麻烦并使用ProductionDb中的最新数据更新我们的TestDb。

只需添加列,为其添加默认值即可。在这种情况下,没有什么可怕的。一切都在继续,没有停机时间,没有更新脚本的麻烦。

问题

有时候我们想要重构列名,因为它们在事后的想法中并没有很好的选择。

我想知道这样的事情是否可行:

  • 提供一个(半)永久的第二个名字'到列(或表)
  • 生产服务器与OldName对话
  • 与NewName的发展对话
  • 部署新版本后,我们可以删除OldName别名

结果:重构列/表名称时没有任何停机时间或更新脚本。

这可能吗?我们使用实体框架 SQL Azure

2 个答案:

答案 0 :(得分:2)

或许有点天真:

表的替代名称:

create view new_table_name as 
select * 
from old_table_name

列的替代名称:

create view new_table_name as 
select x.*, x.old_column_name as new_column_name 
from old_table_name x

以下陈述有效:

update old_table_name
set old_column_name = value
where key = key_value

update new_table_name
set old_column_name = value
where key = key_value

update new_table_name
set new_column_name = value
where key = key_value

另请参阅:How to rename SQL table column name(s) and not break stuff

答案 1 :(得分:0)

您无法为列名或表名创建别名,如果您不想在某个阶段更新数据库列/表名,则需要运行脚本。

虽然在您的代码中通过EF,您只需更新该列或表的属性名称,并保持映射到原始数据库名称。这意味着至少您的对象将具有新的/更好的名称。

相关问题