使用 SSDT 进行自定义表比较和部署

Posted

技术标签:

【中文标题】使用 SSDT 进行自定义表比较和部署【英文标题】:Custom table compare and deployment using SSDT 【发布时间】:2014-03-21 04:02:51 【问题描述】:

我陷入了这样一种情况,即我的 SSDT / 数据库项目中存在的数据库架构具有较少的架构,而生产数据库将具有更多的架构对象。这些额外的模式对象由客户创建,仅用于他自己的目的(例如维护)。

简而言之,SSDT / 数据库项目包含与应用程序相关的所有模式,而产品/客户环境包含与应用程序相关的模式以及更多与维护相关的模式对象

现在我需要修改 SSDT / 数据库项目中的一些与应用程序相关的架构对象,但我担心的是当我向客户提供构建时,SSDT / 数据库项目的默认性质是比较 2 个数据库,即源(客户数据库)和目标(SSDT / 数据库项目)并从源中删除目标中不存在的对象。因此客户为维护目的创建的对象将被删除。

那么有什么我可以通过 SSDT / 数据库项目设置来避免这种情况的原因。

提前致谢

【问题讨论】:

【参考方案1】:

SQLPackage 和发布配置文件中都有一个选项,您可以将其设置为如果对象不在源中,则不删除它们。我经常将它用于我们的生产数据库版本。

查看http://msdn.microsoft.com/en-us/library/hh550080%28v=vs.103%29.aspx 以获取 SQLPackage 参考。您需要“DropConstraintsNotInSource”、“DropDmlTriggersNotInSource”、“DropObjectsNotInSource”等参数。

如果您右键单击您的 SQL 项目并选择“发布”,然后单击“高级”按钮,您将看到用于删除/不删除对象的各种选项。

如果您担心这种意外发生,我会使用您要使用的设置设置发布配置文件,然后仅使用它来推送您的更改。您可以在选择发布时轻松保存您正在使用的发布选项,然后再参考。 Jamie Thomson 在这里有一篇很棒的博客:http://sqlblog.com/blogs/jamie_thomson/archive/2012/05/09/publish-profile-files-in-sql-server-data-tools-ssdt.aspx

【讨论】:

以上是关于使用 SSDT 进行自定义表比较和部署的主要内容,如果未能解决你的问题,请参考以下文章

usort — 使用用户自定义的比较函数对数组中的值进行排序

自定义 Mapper 和 Reducer 与 HiveQL

使用自定义比较功能对列表列表进行排序

无法使用自定义容器 GCP 进行部署

使用 Slick 3 进行自定义表映射类型推断

无法使用视图定义中具有表的完全限定名称的视图编译 SSDT 数据库项目