简单的SQL查询引发错误

时间:2011-02-14 15:44:10

标签: sql

  

Microsoft OLE DB Provider for SQL   服务器错误'80040e14'

     

列前缀'tblUsers'没有   与表名或别名匹配   在查询中使用

正在执行的查询是:

SELECT tblProjects.projectName, tblUsers.username
FROM tblProjects
INNER JOIN
    tblUsers ON tblProjects.userID = tblUsers.ID
WHERE (tblProjects.ID = 190)

当我在SQL Server 2005中运行它时,它运行正常并返回正确的结果!在我的代码中,这会引发错误。

通过经典的ASP脚本调用它:

strSQL = "SELECT tblProjects.projectName, tblUsers.username FROM tblProjects INNER JOIN tblUsers ON tblProjects.userID = tblUsers.ID WHERE (tblProjects.ID = " & lngProjectID & ")" 
rsCommon.open strSQL, adoCon
    strProjectPath = "../projects/" & rsCommon("username") & "/" & rsCommon("projectName")
rsCommon.close

4 个答案:

答案 0 :(得分:2)

我个人认为没有任何理由会抛出错误。查询和代码似乎很好。问题可能在别的地方吗?您可以尝试添加@Micheal建议的括号。希望有效。

答案 1 :(得分:1)

对于初学者,我会尝试将所有表名和列名放在方括号中,看看问题是否得到解决:

SELECT [tblProjects].[projectName], [tblUsers].[username] 
FROM [tblProjects] 
INNER JOIN 
    [tblUsers] ON [tblProjects].[userID] = [tblUsers].[ID] 
WHERE [tblProjects].[ID] = 190

答案 2 :(得分:1)

不确定,但它是否可能???? Ole DB提供程序错误地阻塞“INNER JOIN”而不是简单的“JOIN”并且引擎解析的令牌缺少别名tblUsers?

答案 3 :(得分:1)

尝试使用架构为表名添加前缀。 即。

SELECT [dbo].[tblProjects].[projectName], [dbo].[tblUsers].[username]
FROM [dbo].[tblProjects]
INNER JOIN
    [dbo].[tblUsers] ON [dbo].[tblProjects].[userID] = [dbo].[tblUsers].[ID]
WHERE ([dbo].[tblProjects].[ID] = 190)

如果您使用dbo以外的架构,请指定它 当您运行查询时,可能会选择默认架构,这与通过简单连接字符串连接并尝试运行此查询的情况不同。