为什么SQL忽略了WHERE子句中的条件?

时间:2016-06-13 15:56:27

标签: sql sql-server database sql-server-2014-express

出于某种原因,当我通过以下查询时:

SELECT [313], [313 DE MINIMIS LIMIT] 
FROM [Chem CAS INV] 
WHERE [313 DE MINIMIS LIMIT] IS NULL AND 313 = '313'

SQL Server返回的行显然与指定的条件不匹配,如下所示:

enter image description here

我知道有时使用NULL可能需要更深入地了解SQL的工作方式(比如使用IS NOT NOT NULL和IN语句与NOT EXISTS等),但我已经完成了简单的检查很多次这样的NULL,我无法理解为什么313会忽略对字符串值的简单检查。

我使用的是SQL Server 2014 Express,以下是这些列的数据类型:

enter image description here

我觉得我错过了一些明显的东西,但我无法理解它会是什么。

1 个答案:

答案 0 :(得分:7)

313 = '313'匹配因为SQL认为你的意思是NUMBER 313而不是你的专栏[313]。您需要将其包装在括号中,就像查询的其余部分一样。作为旁注,这就是为什么命名列NUMBER完全疯狂的一个原因。你会经常遇到这些错误。重命名像Val_313或某些东西其他的合理的东西。您应该将括号视为SQL Server的说法:"您确定您想要这样做吗?" 99.99%的时间你的回答应该是:没有。 :)