升级数据库时是不是有导致 SqlPackage.exe 执行数据移动(表重新创建)的完整列表?

Posted

技术标签:

【中文标题】升级数据库时是不是有导致 SqlPackage.exe 执行数据移动(表重新创建)的完整列表?【英文标题】:Is there a complete list of what causes SqlPackage.exe to perform data motion (table recreation) when upgrading a database?升级数据库时是否有导致 SqlPackage.exe 执行数据移动(表重新创建)的完整列表? 【发布时间】:2017-11-14 13:26:55 【问题描述】:

generating a database upgrade using Sql Server Data Tools's sqlpackage.exe 时,SSDT 可能会生成代码迁移表数据,也就是创建一个具有所需最终模式的新临时表,将数据从原表移动到新表中,删除原表,然后重命名临时表以匹配原始表的名称。

该脚本中的代码可以在语句PRINT N'Starting rebuilding table <tablename>';之后找到。

我想这样做的大部分原因是由于没有原子 DDL 语句来生成升级所需的更改。我为另一个类似的工具找到了list 的此类案例。但是,我正在尝试查找有关 SSDT 何时执行数据迁移/表重新创建的一些文档,因为我已经看到 DDL 可用于完成这项工作的某些情况,但 SSDT 仍会重新创建表(例如,更改聚集索引时)。

我的问题是:SSDT 何时生成用于数据迁移/表重建的代码是否有任何记录?

【问题讨论】:

【参考方案1】:

不,很遗憾,这没有记录在案。在 SSDT 中实现忽略列顺序功能时,我有机会查看表数据移动场景。即使给出了源代码,也很难生成导致表数据移动的情况的完整列表,因为它被视为意外或其他未处理情况的“安全”回退。

【讨论】:

【参考方案2】:

如果您希望更好地控制数据移动的发生方式,Flyway 或 Redgate Deploy 可能是您的理想选择。 Redgate Deploy 通过预先生成脚本并将这些作为第一类部署工件包含在您的 Visual Studio 项目中,与 SSDT 的基于状态的方法不同。这意味着您可以查看脚本,并且至关重要的是,如果您认为它没有选择最佳方法,则可以修改它们。

有关 Redgate Deploy 的更多信息,请访问on the Redgate website。

【讨论】:

以上是关于升级数据库时是不是有导致 SqlPackage.exe 执行数据移动(表重新创建)的完整列表?的主要内容,如果未能解决你的问题,请参考以下文章

Spark Elasticsearch Bad Request(400)

JAVA升级导致Android编译时Jack server出错

Xcode 9.2升级导致此错误:“命令/ bin / sh失败,退出代码为1”

如何管理生产数据库的模式升级?

升级到 iPhone SDK 3.0 导致 UIKit 问题

salt-master升级失误导致的启动失败