在数据库项目中的新 table 上创建 Not Null FK

Create Not Null FK onto new table in Database project

我有一个 table,里面有行。我正在使用 SQL 数据库项目来管理数据库,我想通过向此 table 添加一个新的 NOT NULL 列来升级架构,该列带有对新 [= 的 FK 约束18=](也包含在新版本的项目中)。

这可能吗?我知道我可以使用该选项为新的 FK 列生成智能默认值,但这没有帮助,因为我没有机会将任何行放入 FK 引用的新 table 中。

我有哪些选择?因为预部署脚本在模式比较完成后执行,所以我无法在此处创建新的 table,因为比较先运行并确定它需要创建 table - 当它在脚本中到达这一点并发现 table 已经存在(在预部署期间创建)

我看到了 3 种方法:

  1. 在 运行 sqlpackage.exe(或任何你用来部署的东西)之前使用一个预比较脚本来做你想做的事,它工作得很好并且通常很简单在比较之前添加一个额外的 "run this script" (https://the.agilesql.club/Blog/Ed-Elliott/Pre-Compare-and-Pre-Deploy-Scripts-In-SSDT).

  2. 在分阶段部署中执行,因此在第一个版本中添加默认约束并更正现有数据,然后在以后的版本中使用非空约束强制执行它

  3. 您可以与部署贡献者一起编写自己的更新。

我个人使用 1 和 2,选项 3 似乎有点矫枉过正(p.s。我没有忘记你的 table 重写问题)

编辑

我们的解决方案:

在预部署脚本中创建新的临时文件 table 并在其中移动所需的数据。在 post-部署脚本中,我们从这个临时 table 读取数据并更新其他 table。因此,您不会干扰数据库部署,并且拥有恢复引用所需的所有数据。是的,我同意,它很丑。