我正在尝试为现有数据库创建SQL Server数据库项目(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替换别名的使用吗?这太难以成为一个解决方案......我确实遇到过关于类似问题的问题,所提出的解决方案是改为2部分命名约定,在我的情况下这是不可扩展的。还有其他想法吗?
答案 0 :(得分:2)
正如其他成员所说,这是一种有效的语法。我只是想分享为什么它对我来说是错误的。我收到错误的原因是因为陈旧的存储过程。当我导入模式时,我得到了这些存储过程,但是列名已在当前模式中更改,并且这些存储过程未更新。由于我的主要目标是暂时建立这个项目,我评论了'where'子句并继续前进。感谢您的帮助。
答案 1 :(得分:0)
您使用的SSDT版本是什么?我使用最新的SSDT更新尝试了相同的声明,并且支持它没有相同的问题。您可以从SSDT Preview update for VS 2013
下载最新的SSDT更新SSDT预览更新目前拥有最新的支持。它被标记为预览,因为它支持SQL Server 2016 CTP,但对于SQL Server 2012,它应该提供RTM级别的稳定性。