30

我在 SSDT 中有一个数据库项目,当我导入一个引用不同数据库中对象的视图时,我收到错误 SQL71561,其描述如下:

错误 4 SQL71561:视图:[schema].[viewname] 对对象 [other_db].[schema].[table].[column] 的引用未解析

我花了一些时间试图弄清楚这一点,所以为了帮助其他人遇到这个问题,我将发布对我有用的答案。

4

6 回答 6

36

为了解决这个问题,我添加了对另一个数据库的引用,清除了对话框中的“数据库变量”字段。如果我不清除此字段,则在进行模式比较时,SSDT 将使用数据库变量名称生成更新脚本,这将失败。

  1. 向项目添加数据库引用
  2. 在我的情况下,另一个数据库是同一解决方案中的另一个项目,因此我可以在“添加数据库引用”对话框的第一个下拉菜单中选择它。
  3. 确保“数据库名称”字段中的文本正确。
  4. 清除“数据库变量”字段。

查看“示例用法”文本并验证它是否符合预期。单击“确定”以添加引用,这应该会处理“未解决的引用”错误。

这样做之后,我能够进行架构比较,但是尝试构建项目会产生以下错误:

错误 408 SQL00208:对象名称“db.schema.table”无效。

转到项目属性并取消选中“为公共对象启用扩展 Transact-SQL 验证”允许项目成功构建。

于 2012-08-28T14:21:32.050 回答
15

我的问题是从一个角度来看。在我的观点中...

...FROM [MyDatabase].[dbo].[MyTable]

我把它换成...

...FROM [MyTable]

原因是您可能将 bacpac/dacpac 导入到不同的数据库名称中,因此对 [MyDatabase] 的引用可能无效。

于 2014-02-10T16:54:51.817 回答
0

如果您的构建顺序不正确,您可能会遇到这种情况。

从源代码管理中提取项目的新副本并执行“构建解决方案”时,我遇到了这个问题。

如果引用不起作用,请确保构建引用的数据库 [other_db]。一旦我建立 [other_db] 我的参考工作。

于 2015-07-13T13:39:34.687 回答
0

当我将项目属性 > 目标平台从 SQL Server 2016 更改为 SQL Server 2014 时,这些错误开始出现。

在我的场景中,我有一个由一个 SSDT 项目 (A) 中的外部工具创建的数据库,以及另一个项目 (B) 中的我的 SQL 视图等,并参考了 B->A。

针对 SQL 2016 进行开发后,我发现我们的测试环境在 2014 年运行,因此更改了 (B) 中的目标平台,以便进行部署。(A) 未部署 - 还安装并配置了外部工具以生成相同的数据库。

奇怪的是,我后来能够更改 (B) 中的视图并发布,但后来想删除一列。此时,由于这些参考错误,发布一直失败。将项目 (A) 上的目标平台更改为 2014,然后清除错误并允许我继续。

于 2017-10-31T17:17:28.963 回答
0

在尝试了上述所有四个答案之后,我的两个存储过程仍然出现相同的错误。(从 1000+ 个错误到只有 2 个)

所以现在起作用的是,我只是用表名本身替换了表别名,然后构建成功了。

--From
table1 t1 join table2 t2
t1.col1 = t2.col1
--To
table1 t1 join table2 t2
table1.col1 = t2.col1
于 2019-11-15T11:30:45.530 回答
0

以上解决方案都不适合我。

但是这个:

添加数据库引用

并更改那些引用其他数据库项目的脚本。例如,如果您有一个引用的视图AdventureWorks,请AdventureWorksDW使用以下语法:

select * from [$(Your Database Variable)].Schema.Object

例如

select * from [$(Your Database Variable)].dbo.dimDate
于 2021-03-04T18:41:45.693 回答