具有复杂变化的DACPAC包

时间:2016-08-08 17:01:45

标签: sql-server dacpac

我希望切换到DACPAC来进行数据库更改,但是对于更复杂的数据库更新,我有点不知所措。为了说明我的意思,让我使用一个具有相同问题的简单示例。

假设我有一个当前正在使用的Customer表,并且我想添加一个新的CustomerType表,其中包含Customer到CustomerType的外键。 Customer中的新列应该是必需的(不可为空),但不应该有默认值。

我想在升级时使用一些任意公式为现有客户设置初始类型。我如何使用DACPAC实现这一目标?

DACPAC只会知道有一个新列,并会尝试将其添加到Customer表中,这当然会失败,因为它是必需的。设置默认值是不合需要的,因为允许空值。

由于DACPAC应该可用于从每个状态升级到最新状态,因此我没有看到我应该设置哪种配置或前/后脚本来使其工作。

各种搜索都令人失望地缺乏有用的结果:(

我希望这里有人可以提供帮助。提前致谢。

1 个答案:

答案 0 :(得分:0)

答案会有所不同,具体取决于您计划如何部署dacpac。一个常见的情况是让dacpac替换一些T-SQL更新脚本集合,这些脚本按顺序执行以将数据库模式从一个版本更新到下一个版本。在这种情况下,您可以为数据库的每个模式版本选择一个dacpac文件,并更新您计划按顺序发布dacpacs以将数据库更新到最新版本的数据库。

在这种情况下,可以使用部署后脚本来根据需要修复架构。对于您的示例场景,您可以使用指定为NULL的新列并且与新表没有FK关系来为数据库项目中的数据库建模。然后,在部署后的脚本中,您可以编写执行UPDATE语句以填充新表和新列所需的T-SQL,使用ALTER语句将列的类型从NULL更改为NOT NULL,以及最后添加外键关系。

然后继续前进,您可以删除部署后脚本,并使用正确的列类型和FK关系为新列和表建模。