数据库项目:数据库引用不起作用

Database project: database references do not work

在数据库项目中,DB2 引用了 DB1。当我制作 DB1 的 dacpac 并在 DB2 中添加对 dacpac 的引用时,项目编译没有错误。

无论如何,由于 DB1 和 DB2 在同一个解决方案中,我试图添加数据库引用而不是对 dacpac 的引用。由于 DB1 和 DB2 在生产中可能驻留在不同的服务器上且名称不同,因此我为数据库和服务器添加了 $(parameters)。项目不编译:

Error 1069 SQL71561: View: xyz has an unresolved reference to object [$(server)].[$(dbname)].[someschema].[sometable].

参数设置正确。我是否忽略了有关数据库引用的内容?

我没有注意到我的解决方案中引用的数据库项目由于编译错误而未在 Visual Studio 中编译。编译引用的项目后,对这些项目的引用也有效。

能够在 Visual Studio 中提取 dacpac 并不表示项目编译的情况;当直接从数据库中提取 dacpac 时,该数据库的外部引用将有效,而数据库项目必须首先提供这些引用。

首先只是为了验证项目本身是否设置正确。 您在 DB1 的解决方案中有一个项目。 您在 DB2 的解决方案中有一个项目。

从头开始(通常最容易使用数据库引用 - 添加引用后您无法轻松编辑属性)。从 DB2 项目中删除对 DB1 的任何现有数据库引用。

清除溶液。 构建 DB1(验证是否已在 \bin\debug 等中为 DB1 创建了 DACPAC)并在必要时修复任何错误。

在 DB2 中添加对解决方案项的数据库引用。右键单击引用,select 添加数据库引用。在下拉列表中选择第一项(当前解决方案中的数据库项目)。选择 DB1。

在底部,select 'Different Database, Different Server' 来自下拉列表。 再次输入变量。验证底部的示例用法是否指示 'SELECT * FROM [$(server)].[$(dbname)].[Schema1].[Table1]'(或类似内容,具体取决于您选择的变量名称)。记下该示例并将其复制到某处的笔记或剪辑中。

这应该可以解决问题。您已经更改了 views \ procs 以引用变量。

我认为这里最简单的规则是,如果您不确定,请删除引用并重新添加。没有简单的方法来编辑变量名等。此外,如果 DB1 构建失败,那么您仍然会遇到上述引用错误。