看似简单的查询会引发错误

时间:2012-10-11 15:08:52

标签: sql

我正在为我正在进行的实验室准备2张桌子。表1是一个职位名称列表,其中包含描述,标题和状态字段,以及我需要能够与第二个表Employees一起加入的索引值。下面的查询看起来很简单,但它会抛出一个错误:

SELECT e.FirstName, e.LastName, e.Salary, jt.JobTitle, jt.JobDesc, jt.[Status]
From Employee e
JOIN Job_Title jt
ON e.EEO-1Class = jt.EEO-1Class
WHERE e.Salary BETWEEN 10000 AND 40000

它吹嘘e.EEO-1Class说“在预期条件的上下文中指定的非布尔类型的表达式,靠近'Class'。

我加入的字段已经是int字段,所以我对我所缺少的内容感到困惑。我确信这是“duh”答案之一:)

3 个答案:

答案 0 :(得分:3)

您需要将字段名称放在方括号中。

所以改变......

ON e.EEO-1Class = jt.EEO-1Class

ON e.[EEO-1Class] = jt.[EEO-1Class]

如果您的字段或表名只包含字母数字字符(即AZ和0-9)和下划线_字符,那么您可以使用它而不使用方括号([和{{1} })。

但是只要你有一个不同的字符(并且很容易被SQL服务器混淆,例如]),那么你需要将字段/表放在方括号中。

但是,除了其他所有内容之外,我建议您只使用字母数字字符(以及下划线-字符)作为字段和表名,因为它被认为是更好的做法,并将删除此类型为你再次发生的事情

答案 1 :(得分:2)

我认为它可能是列名中的' - '。试着把它放在[]括号内。

答案 2 :(得分:2)

使用括号转义列名:EEO-1ClassEEO-1Class。由于-符号,服务器执行减法

SELECT e.FirstName, e.LastName, e.Salary, jt.JobTitle, jt.JobDesc, jt.[Status]
From Employee e
JOIN Job_Title jt
ON e.[EEO-1Class] = jt.[EEO-1Class]     -- << this two columns.
WHERE e.Salary BETWEEN 10000 AND 40000