我有一个包含2个SSDT数据库项目的解决方案,一个引用另一个。在其中一个存储过程中,我有一个简单的更新语句,如下所示:
update [$(otherDb)]..OtherTable set TheField = @value where OtherTable.Id = @id
我有很多存储过程在其他表上执行相同的操作,这个存储过程已经工作了好几个月,甚至智能感知甚至能够显示表的所有列。即便如此,我仍然会收到错误
SQ71561: Procedure [dbo].[MyProcedure] has an unresolved reference to object [$(otherDb)].[dbo].[OtherTable].[TheField]
任何机构都有任何想法发生了什么?
答案 0 :(得分:0)
删除DBML文件并重建项目
答案 1 :(得分:0)
答案 2 :(得分:0)
这是Jony Lalwani。
我安装了Visual Studio 2017,它的SSDT版本为15.1。我在脚本中检查了变量[$(DATABASE)]的用法,下面是观察结果 -
1-存储过程,表值函数&如果使用DB.dbo.Table而不是[$(DB)],则标量函数将仅抛出未解析的引用警告.dbo.Table。因此,即使我们不使用变量,构建在这些脚本中也是成功的。 2-按设计内联功能&如果我们使用DB.dbo.Table而不是[$(DB)],则视图将抛出未解析的引用错误.dbo.Table。因此,在这些脚本中,需要变量引用。
以上两点对Visual Studio 2013 SSDT(12.0)也有效,并且它的工作方式也相同。但是,当我们从SQL数据库导入或更新架构时,VS 2013 SSDT有时会在存储过程中抛出未解析引用的多个错误。这是由于2013年SSDT的漏洞造成的。