【SQL】NULLや空文字を含むパラメータの対応

Sponsored Links

検索ページなどで、ユーザが検索条件を入れたとき、入れなかったときに、条件(where句)を制御する方法として、安直な方法としては、クエリを動的に作成し、if文等で、クエリにその条件を追加することで実現できる。
Stored Procedureを使っているような場合でも、Stored Procedure内で、文字列を定義し、その文字列内でwhere句を含め、クエリを完成させていく。
下記イメージ:

declare @query nvarchar(max)
set @query = 'select column1, column2 from table where 1=1 ';
if @para1 is not null
begin
   set @query = @query + 'column1 = ' + @para1
end

sp_executesql @query -- @queryを実行

せっかくStored Procedureを使っていても、上記のような書き方をすると、実際にStored Procedureが実行されないと、クエリがあっているか評価ができず、開発面でも、ちょいと面倒なことが多い。
かつ、せっかくStored Procedureを使うにもかかわらず、事前に実行プランが作成されないので、Stored Procedure内で静的クエリで定義されている場合に比べ、多少なりとも処理時間が掛かる可能性がある。

せっかくStored Procedureを使用する場合は、パラメータが空であれば、条件として入れないようにする方法案として、下記のようなクエリを書くことができる。
@para1が空であれば(NULLであれば)、その後の「COLUMN1 = @para1」は、条件には当てはまらないが、ORなので、COLUMN1の条件は結局無視される。
逆に@para1が空でない(NULLでない)場合は、「@para1 is null」には当てはまらないが、「COLUMN1 = @para1」が適用され、COLUMN1=@paraでフィルタされる。

select *
from table_name
where (@para1 is null or COLUMN1 = @para1) 
and (@para2 is null or COLUMN2 <= @para2)

IT
Sponsored Links
Sponsored Links
Sponsored Links
ようさんチョットでぶ
Copied title and URL
Bitnami