我在 SSDT 中有一个数据库项目,当我导入一个引用不同数据库中对象的视图时,我收到错误 SQL71561,其描述如下:
错误 4 SQL71561:视图:[schema].[viewname] 对对象 [other_db].[schema].[table].[column] 的引用未解析
我花了一些时间试图弄清楚这一点,所以为了帮助其他人遇到这个问题,我将发布对我有用的答案。
我在 SSDT 中有一个数据库项目,当我导入一个引用不同数据库中对象的视图时,我收到错误 SQL71561,其描述如下:
错误 4 SQL71561:视图:[schema].[viewname] 对对象 [other_db].[schema].[table].[column] 的引用未解析
我花了一些时间试图弄清楚这一点,所以为了帮助其他人遇到这个问题,我将发布对我有用的答案。
为了解决这个问题,我添加了对另一个数据库的引用,清除了对话框中的“数据库变量”字段。如果我不清除此字段,则在进行模式比较时,SSDT 将使用数据库变量名称生成更新脚本,这将失败。
查看“示例用法”文本并验证它是否符合预期。单击“确定”以添加引用,这应该会处理“未解决的引用”错误。
这样做之后,我能够进行架构比较,但是尝试构建项目会产生以下错误:
错误 408 SQL00208:对象名称“db.schema.table”无效。
转到项目属性并取消选中“为公共对象启用扩展 Transact-SQL 验证”允许项目成功构建。
我的问题是从一个角度来看。在我的观点中...
...FROM [MyDatabase].[dbo].[MyTable]
我把它换成...
...FROM [MyTable]
原因是您可能将 bacpac/dacpac 导入到不同的数据库名称中,因此对 [MyDatabase] 的引用可能无效。
如果您的构建顺序不正确,您可能会遇到这种情况。
从源代码管理中提取项目的新副本并执行“构建解决方案”时,我遇到了这个问题。
如果引用不起作用,请确保构建引用的数据库 [other_db]。一旦我建立 [other_db] 我的参考工作。
当我将项目属性 > 目标平台从 SQL Server 2016 更改为 SQL Server 2014 时,这些错误开始出现。
在我的场景中,我有一个由一个 SSDT 项目 (A) 中的外部工具创建的数据库,以及另一个项目 (B) 中的我的 SQL 视图等,并参考了 B->A。
针对 SQL 2016 进行开发后,我发现我们的测试环境在 2014 年运行,因此更改了 (B) 中的目标平台,以便进行部署。(A) 未部署 - 还安装并配置了外部工具以生成相同的数据库。
奇怪的是,我后来能够更改 (B) 中的视图并发布,但后来想删除一列。此时,由于这些参考错误,发布一直失败。将项目 (A) 上的目标平台更改为 2014,然后清除错误并允许我继续。
在尝试了上述所有四个答案之后,我的两个存储过程仍然出现相同的错误。(从 1000+ 个错误到只有 2 个)
所以现在起作用的是,我只是用表名本身替换了表别名,然后构建成功了。
--From
table1 t1 join table2 t2
t1.col1 = t2.col1
--To
table1 t1 join table2 t2
table1.col1 = t2.col1
以上解决方案都不适合我。
但是这个:
并更改那些引用其他数据库项目的脚本。例如,如果您有一个引用的视图AdventureWorks
,请AdventureWorksDW
使用以下语法:
select * from [$(Your Database Variable)].Schema.Object
例如
select * from [$(Your Database Variable)].dbo.dimDate