升级数据库时是不是有导致 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”