2012-03-16 6 views
1

null値または空値を許可するvarcharカラムを含むテーブルがあります。今、私は「NULLが可能な変数と等しいかどうかを確認する方法

declare @myvar varchar(50) 

は、私はそれは次のように定義されていますNULL値または通常の文字列(空でない)

に割り当てることができる変数が含まれているストアドプロシージャを書いています列がこの変数と等しいか、空であるかNULLである行を戻す問合せを作成しようとしています。列がnullで、変数は、それがどんな値を返しませんnullである

select * from mytable where mycolumn [email protected] or mycolumn ='' 

しかし場合:これまでのところ、私はこれが仕事に行くと思いました。

私はそれがこのような何かをやって動作させることができます知っている:

select * from mytable where (mycolumn = @myvar and mycolum is not null) or mycolumn is null or mycolumn ='' 

は、これを行うのより良い方法はありますか?

PS:あなたが言ったように、あなたの変数は、それがまだ一致しませんNULLであれば、以降and mycolum is not null:私はあなたがこの部分を必要としないANSI_NULLS OFFに

おかげ

答えて

3

を行うことを希望されません。あなたが同じことをしたい場合は

select * 
from mytable 
where mycolumn = @myvar or mycolumn is null or mycolumn ='' 

、あまり条件で、あなたが行うことができます::だから私は、これは実際には最善の方法だと思い

select * 
from mytable 
where mycolumn = @myvar or ISNULL(mycolumn,'') = '' 

が、これは(インデックスを使用しません。もしあれば)をマイカ列に入れてください。 MYCOLUMNがNULLであれば、それは本当だろうので、あなたは

select * from mytable where (mycolumn = @myvar and mycolum is not null) or 
    mycolumn is null or mycolumn ='' 

を書いている

+0

感謝。私はあなたにも代替案を提示したので、あなたの回答に答えを記します。 – LEM

2

、あなたはand mycolum is not nullを使用して、それを防ぐために必要がないので、のように簡略化することができます。

SELECT * FROM mytable 
WHERE mycolumn IS NULL OR mycolumn ='' OR mycolumn = @myvar 
10

あなたは、列が正確に(NULL値を含む)のパラメータを一致させたい場合は

DECLARE @myVariable varchar(10) 

SELECT * 
FROM mytable 
WHERE ((@myVariable IS NULL AND myColumn IS NULL) OR myColumn = @myVariable) 
関連する問題