Visual Server Database Project 数据移动脚本在不同版本的数据库上运行

Posted

技术标签:

【中文标题】Visual Server Database Project 数据移动脚本在不同版本的数据库上运行【英文标题】:Visual Server Database Project data motion scripts run on databases at different versions 【发布时间】:2011-11-25 19:07:20 【问题描述】:

我们一直在使用 Visual Studio 数据库项目来维护项目的当前架构,这对我们来说非常有效,可以将数据库架构安装到新的开发机器上,但我们还没有使用它来升级环境。以前我们使用迁移脚本将您从初始版本带到下一个版本,依此类推,直到您处于当前版本,但现在我们希望利用数据库项目的强大功能。

最近看了Barclay Hill的两篇文章

Managing data motion during your deployments (Part 1)Managing data motion during your deployments (Part 2)

其中描述了在从一个版本转换到另一个版本时如何执行部署前和部署后脚本,我们已经习惯了效果很好,但是我现在陷入了一些我无法解决的问题,并且觉得我错过了。我们有两个不同版本的数据库,但迁移脚本不适用于两者中的旧版本。以下是我们场景的简化版本。

场景

版本 1

表1 列ABC CHAR(1)

版本 2

表1 列XYZ INT

从版本 1 到版本 2 的数据移动

预部署脚本检查数据库的版本,如果是版本 1,它会将 ColumnABC 中的数据放入临时表中。

部署后脚本检查我们现在处于第 2 版,并检查在预部署脚本中创建的临时表是否存在,并在将 char 转换为 int 后将其放入新列 ColumnXYZ。

版本 3

表1 Column123 INT

当我们将数据库从版本 1 升级到版本 2 再到版本 3 时,一切正常。但是,如果我们有一个版本 1 的数据库并且想要跳转到版本 3,则部署后脚本会失败,因为没有 ColumnXYZ,因为它现在是 Column123。

在旧的迁移方法中,这不会成为问题,因为部署会逐个遍历每个版本,但这不是数据库项目的工作方式。有没有其他人经历过这个?你是怎么处理的,我有没有漏掉一些明显的东西?

【问题讨论】:

【参考方案1】:

很抱歉看到您在这里没有得到任何答案。最后你有办法解决吗?

我刚刚开始研究“数据哥们”,而整个数据运动的事情似乎绝对是房间里的大象。

我刚刚阅读了您提到的两篇博客文章,我的理解是您需要结合检查版本和预期的架构条件。所以我猜这意味着您需要在版本 3 的部署后脚本中执行两个不同的子句。

(请告诉我。我仍在努力决定是投资这个还是走经典的 DIY 路线。)

【讨论】:

【参考方案2】:

在我看来,您至少有两种选择:

1) 需要升级路径 1->2->3。

2) 将您的 ColumnABC-ColumnXYZ 数据运动更改为以下内容:

前: (如果 ColumnXYZ 不存在) 添加列 ColumnXYZ (int) 设置 ColumnXYZ = [ColumnABC 的一些转换] 安装: 跳过添加 ColumnXYZ,因为它已经存在。 发布: 无需任何操作

【讨论】:

以上是关于Visual Server Database Project 数据移动脚本在不同版本的数据库上运行的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 和 SQL Server 中按架构名称比较架构

self join in sql server

visual studio 2012怎么连接mysql数据库

Visual Studio 2019 安装项目 - 包括 Access Database Engine Redistributable 2016/2010

在 Visual Studio .net 中连接到 Advantage Database .add

Visual Studio Database Edition:导致“ModelException:至少需要一个标识符。”的原因是什么?