【发布时间】:2016-02-22 21:17:59
【问题描述】:
我正在尝试获取有关 SSDT 数据库开发和部署的一些知识和用例,并努力解决一些部署问题。
特别是在使用嵌套视图时。由于某些未知原因,在尝试将项目中的文件部署/发布到本地/实时数据库时,它似乎弄乱了视图中的引用。
在这个项目中,我有以下观点(示例):
- 查看1
- 查看2
- 查看3
View1 引用 View2,而 View3 正在引用 View1。
构建项目工作正常。但是,当我尝试通过快照生成 dacpac 并将其发布到数据库或让 Visual Studio 在比较模式之后(或不)生成更新脚本来发布数据库时,我最终会得到一个更新脚本,该脚本试图在它们在项目中存储的逻辑顺序似乎是什么。
在这种情况下,View1 -> View2 -> View3。这意味着由于参考问题,发布失败。如果引用的视图不存在,则无法创建视图。
我已经尝试了几个选项,通过以各种方式在项目中添加 dacpac 作为参考(相同的数据库,相同的服务器,不同的数据库 w/w/o 数据库参数),但在许多情况下,我最终会遇到 sql71561 / SQL71508 错误是另一个要解决的 PITA。
我在网上找不到任何好的资源来解释如何解决这个问题或解释它是如何正常工作的。
希望我能在这里得到一些帮助。如果您需要我方面的额外意见或希望我尝试一些事情,请告诉我。
【问题讨论】:
-
我强烈建议您放弃使用嵌套视图的概念。这似乎完全合乎逻辑,但表现绝对可怕。它会让你的 sql server 崩溃。 simple-talk.com/sql/performance/…
-
你能放一些演示代码来重现它吗?
-
@seanlange 我想它和大多数东西一样,不是功能,而是你用它做什么:) 每个嵌套视图不会影响性能,但编写复杂查询的成本很高在嵌套视图的情况下可能被隐藏
-
@SeanLange:我很清楚最佳实践,但是这是目前我们需要处理的情况,是一个临时解决方案。随时对提出的实际问题发表评论。
-
我不得不用作破解/解决方法的一件事是关闭初始部署的事务,然后回来重新发布数据库。这通常会让第一次发布完成,如果部分不成功,那么一旦创建了父对象,我就可以回来创建适当的视图/过程。除了刚开始使用一组空的数据库之外,我不建议这样做。不过,很高兴您找到了一些解决方法。
标签: sql-server visual-studio sql-server-data-tools database-deployment