【发布时间】:2018-09-12 19:26:14
【问题描述】:
我刚刚开始涉足 SSDT 并遇到了问题。
我的解决方案包含 2 个数据库。两个数据库都使用同义词相互引用。因此,就 SSDT 而言,我们有循环引用。
我知道这种安排的设计问题,因此无需对此发表评论,也无需建议对数据库本身进行结构更改。这是一个现有的系统,我无权从结构上改变它。
我也知道 SSDT 不允许循环引用这一事实。这里有一个解决方法(http://social.msdn.microsoft.com/Forums/en-US/ssdt/thread/5fd12f01-54e6-4e7d-b7e2-14fa9df9a7ef)。 它建议将 DB1 拆分为 2 个项目 DB1 和 DB1a,例如其中 DB1a 引用 DB1 和 DB2,并使 DB2 引用 DB1。但我不确定如何在不实际创建额外数据库的情况下对其进行配置。
我认为我唯一的选择是将其保留为 2 个项目,但将它们设置为忽略未解决的引用。
【问题讨论】:
-
这两个数据库之间有多少对象是相互依赖的?如果只有几个,您可能想考虑通过将它们包含在其中一个数据库项目的部署后脚本中来强制部署它们。这将节省您创建第三个数据库项目的时间。
-
两个数据库中大约有 30-40 个触发器。这是一个双向接口,可以让旧系统从新系统中更新,反之亦然(编写成本比新系统高!但客户永远是对的 :))。无论如何,我现在已经从 SSDB 项目中删除了触发器,并将按照您的建议将它们添加为后期部署。我想我已经找到了一种通过更改扩展 TSQL 验证属性来停止同义词创建错误的方法。
-
实际上,将数据库拆分为两个项目并不能使其成为两个数据库。这些被称为复合项目。另见sqlblog.com/blogs/jamie_thomson/archive/2012/01/01/…
-
这里解释了一种管理循环的方法:stackoverflow.com/a/34819649/416988
标签: sql-server sql-server-data-tools