在数据库项目中允许(一次)列删除

Posted

技术标签:

【中文标题】在数据库项目中允许(一次)列删除【英文标题】:Allow (once) column drop in database project 【发布时间】:2013-09-26 14:33:32 【问题描述】:

我想在现有表中删除一列。当我只是从表的创建脚本中删除它时,它会在部署时导致错误(数据丢失......)。我想允许(在这种情况下)列删除。你会怎么做?

【问题讨论】:

【参考方案1】:

要禁用数据丢失错误:

    单击架构比较文件中的选项图标。 取消选中“阻止可能的数据丢失”。

该设置将仅针对该 1 个架构比较进行更改,并将保存在架构比较文件中。如果您只想这样做一次,则需要在删除列后重新启用该选项。

【讨论】:

【参考方案2】:

我们通过创建一个 PreDeployment 脚本来删除该列来做到这一点。推理是我们不想让数据库中所有对象的数据丢失。

您可以创建自动版本检查以仅执行一次(有关如何使用 SSDT 自动执行此操作的步骤,请参阅我对另一篇帖子 Nontrivial incremental change deployment with Visual Studio database projects 的回答。)

或者您可以将脚本提供给 devops,并在安装手册中包含说明,以便为特定版本运行一次。

发布上线后,您可以删除 PreDeployment 脚本。

【讨论】:

对于通用解决方案,此类脚本还需要在运行发布之前截断表 - 因为后者不是检查列是否仍然存在,而是检查它是否包含行。但是,也许 Pre-Deploy 可以将行存储在某个地方,而 Post-Deploy 可以将它们加载到更新的表中。

以上是关于在数据库项目中允许(一次)列删除的主要内容,如果未能解决你的问题,请参考以下文章

路径不适用于 Blazor 中允许的 IdentityServer CORS 端点,但适用于 Postman

在 joi 和 express-validation 中允许字符串为空或空

Commitlint - 在范围枚举中允许“/”

SBT 在装配过程中允许重复

如何在我的 Django Rest Framework 项目中允许所有跨域请求?

在 laravel+vuejs 项目中允许 X-CSRF-TOKEN 吗?