如何解析 [dbo].[SP_NAME] 包含对 Sql 服务器数据库项目中对象的未解析引用?

How to resolve [dbo].[SP_NAME] contains an unresolved reference to an object in Sql Server Database Project?

我正在尝试为我们现有的数据库创建 SQL 服务器数据库项目(SQL 2012,VS 2013 .net v4.6)。我创建了项目,导入了架构,现在 运行 进入了这个问题。我收到以下错误:

错误 SQL71501:过程:[dbo].[StoredProc_Name] 包含未解析的对象引用。对象不存在或引用不明确,因为它可能引用以下任何对象:[dbo].[TABLE1].[TABLE_ALIAS]::[COL1]、[dbo].[TABLE1] .[COL1] 或 [dbo].[TABLE1].[TABLE_ALIAS]::[COL1]。 D:\SPNAME.sql

我知道一个修复方法,但这对我来说没有意义。如果我不使用别名,而是使用两部分命名约定,那么错误就会得到解决。

--errors when referenced using alias
SELECT T.* 
FROM [dbo].[TABLE1] AS T (NOLOCK)
WHERE T.COL1 = @COL1

--no errors when using 2 part naming convention
SELECT T.* 
FROM [dbo].[TABLE1] AS T (NOLOCK)
WHERE [dbo].[TABLE1].COL1 = @COL1

我很想知道为什么会这样?我非常怀疑问题出在使用别名上,是吗?所以为了构建这个东西,我是否需要用两部分命名约定替换我们所有 sps 中别名的使用?这太难解决了……我确实遇到过谈论类似问题的问题,所提供的解决方案是更改为两部分命名约定,这在我的案例中是完全不可扩展的。还有其他想法吗?

您使用的 SSDT 是什么版本?我使用最新的 SSDT 更新尝试了相同的语句,并且在没有相同问题的情况下得到支持。您可以从 SSDT Preview update for VS 2013

下载最新的 SSDT 更新

SSDT 预览更新目前拥有最新的支持。它被标记为预览版,因为它支持 SQL Server 2016 CTP,但对于 SQL Server 2012,它应该提供 RTM 级别的稳定性。

正如其他成员所建议的那样,这是一个有效的语法。我只是想分享为什么它对我来说是错误的。我收到错误的原因是陈旧的存储过程。当我导入模式时,我得到了这些存储过程,但是列名在当前模式中已经更改并且这些存储过程没有更新。因为我的主要目标是暂时构建这个项目,所以我评论了 'where' 子句并继续前进。感谢大家的帮助。