数据丢失警告在表中间添加列

And*_*ner 4 sql-server version-control redgate

新列已添加到表中,但新列并未添加到表定义的末尾(最右侧的列),而是添加到表的中间。

表差异

当我尝试在 Redgate SQL 源代码管理中提交这个时,我收到警告“这些更改可能导致数据丢失”

  • 数据丢失真的会发生吗?
  • 有没有办法预览更改脚本以确认不会丢失任何数据?
    • 我可以复制脚本并轻松将其转换为 Migrations V2 脚本吗?
  • 我是否只需要
    • 在SSMS中编辑表格并将新列移到最后
    • 或者写一个迁移脚本?
  • 如果是这样,是否有任何方便的工具来完成重复的工作?

Jon*_*Jon 5

预先披露我在 SQL Source Control 上为 Red Gate 工作。

该更改将需要重新创建一个表。默认情况下,SSMS 不允许您保存该更改。但是,该选项必须已在 SSMS 中禁用。它位于工具->选项->设计器->表和数据库设计器->防止保存需要重新创建表的更改。

鉴于该功能被禁用,SQL 源代码控制随后将其视为潜在的数据丢失情况,并提示您查看是否要添加迁移脚本。

如果您团队中的其他开发人员通过获取最新信息引入此更改,则 SQL 源代码控制将根据其本地数据库的当前状态让他们了解任何潜在的数据丢失以及更多详细信息。如果唯一的更改是向现有表添加列,则不会删除未更改列中的数据。

如果您正在部署到另一个数据库(例如登台/UAT/prod)并且您有 SQL 比较,您可以使用它来查看如果您尝试针对另一个非本地数据库运行它,它将准确地应用于数据库。选择创建部署脚本选项,您可以在运行前检查 SQL。

正如您所说,将列添加到表的末尾将避免重建的需要,因此如果您不需要担心列的位置,这可能是避免这种情况的最简单方法。

或者,您可以将迁移脚本添加到:

  1. 使用临时名称创建具有新结构的新表
  2. 将现有数据复制到临时表
  3. 删除现有表
  4. 将新临时表重命名为原始名称

您提到了迁移 v2,这是一个测试版功能,它改变了迁移的工作方式,以便更好地支持分支和合并以及 DVCS 系统。见http://www.red-gate.com/migrations

版本 1 迁移脚本需要进行一些修改才能转换为 v2 迁移脚本。这是一个相当微不足道的变化。我们目前正在对此进行记录,如果您想了解有关此更改的更多信息,请通过 Google 群组与我们联系。https://groups.google.com/forum/#!forum/red-gate-migrations