Voi*_*ing -1 sql database sql-server sql-server-2014-express
出于某种原因,当我传递以下查询时:
SELECT [313], [313 DE MINIMIS LIMIT]
FROM [Chem CAS INV]
WHERE [313 DE MINIMIS LIMIT] IS NULL AND 313 = '313'
Run Code Online (Sandbox Code Playgroud)
SQL Server返回的行明显与指定的条件不匹配,如下所示:
我知道有时使用NULL可能需要更深入地了解SQL的工作方式(比如使用IS NOT NOT NULL与IN语句和NOT EXISTS等),但我已经用NULL这样多次做了简单的检查,我无法理解为什么313会忽略对字符串值的简单检查.
我正在使用SQL Server 2014 Express,以下是这些列的数据类型:
我觉得我错过了一些明显的东西,但我无法理解它会是什么.
313 = '313'是匹配因为SQL认为你的意思是NUMBER 313而不是你的专栏[313].您需要将其包装在括号中,就像查询的其余部分一样.作为旁注,这就是为什么命名列NUMBER完全疯狂的一个原因.你会经常遇到这些错误.重命名像Val_313或其他东西一样合理的东西.您应该将括号视为SQL Server的说法:"您确定要执行此操作吗?" 99.99%的时间你的回答应该是:没有.:)