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

Jef*_*ata 25 sql-server sql-server-data-tools

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

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

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

Jef*_*ata 34

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

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

查看"示例用法"文本并验证它是否按预期显示.单击"确定"以添加引用,这应该处理"未解析的引用"错误.

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

错误408 SQL00208:无效的对象名称"db.schema.table".

转到项目属性并取消选中"为常见对象启用扩展的Transact-SQL验证"允许项目成功构建.

  • 微软已经删除了这个选项(Sunsetted)..还有其他选择吗? (6认同)

Jas*_*ger 12

我的问题来自一个观点.在视图中我有......

...FROM [MyDatabase].[dbo].[MyTable]
Run Code Online (Sandbox Code Playgroud)

我换成了......

...FROM [MyTable]
Run Code Online (Sandbox Code Playgroud)

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

  • 很棒的一点,这就是为我解决的问题。当您考虑到 SSDT 的一大用途是使一组数据库与单个架构保持同步时,这是完全有道理的。在这种情况下,为什么我要提供特定的数据库名称?我只需要为我部署到的每个数据库更改它。妈的……你都指出来了,看来很简单了,哈哈。谢谢杰森 (2认同)