2016-06-13 8 views
-1

私は次のクエリを渡すいくつかの理由については、:WHERE句の条件をSQLが無視するのはなぜですか?

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がどのように動作するかをもっと深く理解する必要があるかもしれませんが(IN文とNOT文、NOT EXISTSなどを使ってIS NOT NULLを使用する場合など)、何度もこのようなNULLで単純なチェックを行いました。 313が文字列値の単純なチェックを無視する理由を理解できません。

私は、SQL Server 2014のExpressを使用して、ここで、これらの列に行くのデータ型ですよ:

enter image description here

私は何かを明らかに欠けているように私は感じて、私は何を理解することはできませんそうだろう。

+0

SQLは、313ではなく313の列をSQLに表示しているためです。 – Lamak

+0

Gotchaの代わりに '[313]'を使う必要があります。ありがとうございました。私は決して以前の数字だったコラムを扱ったことはありません。 @Lamak – VoidKing

答えて

7

313 = '313'が一致しているため、SQLはあなたのカラム[313]の代わりにNUMBER 313を意味すると考えています。残りのクエリを実行したように、大括弧で囲む必要があります。副次的な理由として、列の名前をNUMBERにするのは完全に狂っている理由の1つです。あなたはこれらのバグを絶えず持つつもりです。 Val_313やのような賢明な名前に変更してください。 else。あなたはブラケットをSQL Serverの方法として考えるべきです: "あなたはこれをしたいですか?あなたはこれをしたいですか?"あなたの答えがあなたのものでなければならない時間の99.99%:いいえ。 :)

+0

Gotcha。ありがとうございました。私は決して以前の数字だったコラムを扱ったことはありません。 – VoidKing

関連する問題