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