在数据库项目中,DB2引用了DB1。当我创建DB1的dacpac并在DB2中添加对dacpac的引用时,项目编译时没有错误。
由于DB1和DB2无论如何都在同一个解决方案中,我试图添加一个数据库引用而不是对dacpac的引用。由于DB1和DB2可能位于生产中具有不同名称的不同服务器上,因此我为数据库和服务器添加了$(参数)。该项目无法编译:
错误1069 SQL71561:视图:xyz有一个未解析的对象引用 [$(服务器)]。[$(DBNAME)]。[someschema]。[sometable]。
参数设置正确。我是否忽略了有关数据库引用的内容?
答案 0 :(得分:2)
首先只是验证项目本身是否正确设置。 您在DB1的解决方案中有一个项目。 您在DB2解决方案中有一个项目。
从一个干净的平板开始(通常最容易使用数据库引用 - 在添加引用后,您无法轻松编辑属性)。从DB2项目中删除对DB1的任何现有数据库引用。
清理解决方案。 构建DB1(验证是否已在\ bin \ debug等中为DB1创建了DACPAC)并在必要时修复了任何错误。
在DB2中添加对解决方案项的数据库引用。右键单击References,选择Add Database Reference。在下拉列表中选择第一个项目(当前解决方案中的数据库项目)。选择DB1。
在底部,选择不同的数据库,不同的服务器'从下拉列表。 再次输入变量。验证底部的示例用法表示' SELECT * FROM [$(服务器)]。[$(dbname)]。[Schema1]。[Table1]' (或类似,取决于您选择的变量名称)。记下该样本并将其复制到某个地方的注释或剪辑中。
那应该解决问题。您已经更改了views \ procs以引用变量。
我认为这里最简单的规则是,如果你不确定,删除引用并再次添加它。没有简单的方法来编辑变量名称等。此外,如果DB1构建失败,那么您仍然会得到如上所述的引用错误。
答案 1 :(得分:1)
我没有注意到我的解决方案中引用的数据库项目由于编译错误而无法在Visual Studio中编译。一旦编译了引用的项目,对这些项目的引用也起作用。
能够在Visual Studio中提取dacpac并不能表明项目编译的情况;直接从数据库中提取dacpac时,该数据库的外部引用将是有效的,而数据库项目必须首先提供这些引用。