使用SSDT,当我有一个引用不同数据库中的对象的视图时,如何解决SQL71561错误?

时间:2012-08-28 14:21:32

标签: sql-server sql-server-data-tools

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

  

错误4 SQL71561:查看:[schema]。[viewname]有一个未解析的   引用对象[other_db]。[schema]。[table]。[column]

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

6 个答案:

答案 0 :(得分:28)

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

  1. 向项目添加数据库参考
  2. 在我的情况下,另一个数据库是同一解决方案中的另一个项目,因此我可以在“添加数据库引用”对话框的第一个下拉列表中选择它。
  3. 确保“数据库名称”字段中的文本正确无误。
  4. 清除“数据库变量”字段。
  5. 查看“示例用法”文本并验证它是否符合预期。单击“确定”以添加引用,这应该处理“未解析的引用”错误。

    执行此操作后,我能够进行模式比较,但尝试构建项目会产生以下错误:

      

    错误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)

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

但是这个:

Add Database Reference

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

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

例如

select * from [$(Your Database Variable)].dbo.dimDate