-- チェックボックス①、②、③のどれかにチェックが入っていいた場合
IF LEN(ISNULL(@vsCheckbox1, N'')) + LEN(ISNULL(@vsCheckbox2, N'')) + LEN(ISNULL(@vsCheckbox3, N'')) > 0
BEGIN
DECLARE @lsCheckWhere NVARCHAR(MAX) ; SET @lsCheckWhere = N'';
-- チェックボックス①検索条件
IF LEN(ISNULL(@vsCheckbox1, N'')) > 0
BEGIN
SET @lsCheckWhere = @lsCheckWhere + N'
AND ( CHECK_1 = ' + @vsCheckbox1
END
-- チェックボックス②検索条件
IF LEN(ISNULL(@vsCheckbox2, N'')) > 0
BEGIN
IF LEN(ISNULL(@lsCheckWhere, N'')) > 0
BEGIN
SET @lsCheckWhere = @lsCheckWhere + N'
OR CHECK_2 = ' + @vsCheckbox2
END
ELSE
BEGIN
SET @lsCheckWhere = @lsCheckWhere + N'
AND ( CHECK_2 = ' + @vsCheckbox2
END
END
-- チェックボックス③検索条件
IF LEN(ISNULL(@vsCheckbox3, N'')) > 0
BEGIN
IF LEN(ISNULL(@lsCheckWhere, N'')) > 0
BEGIN
SET @lsCheckWhere = @lsCheckWhere + N'
OR CHECK_3 = ' + @vsCheckbox3
END
ELSE
BEGIN
SET @lsCheckWhere = @lsCheckWhere + N'
AND ( CHECK_3 = ' + @vsCheckbox3
END
END
SET @lsCheckWhere = @lsCheckWhere + N')';
END
【Transact-SQL】動的SQLで動的条件の作成
岡部 (2011年11月 7日 10:00)
システムソリューション事業部 / ビジネスソリューション課
システムソリューション事業部ビジネスソリューション課の岡部です。
先日、以下のようなSQLのWhere条件を作成する機会がありました。
チェックボックスの値を全てチェックした場合と全てチェックしなかった場合は
全件検索、それ以外はチェックした分だけを条件として検索する。
このような場合は動的SQLであれば簡単に解決できます。
今回はTransact-SQLにて実装しました。
以下に条件のみを抜粋したサンプルコードを記載します。
※「CHECK_1」,「CHECK_2」,「CHECK_3」というそれぞれのカラムに
条件を設定する前提です。
-- チェックボックス①、②、③のどれかにチェックが入っていいた場合 IF LEN(ISNULL(@vsCheckbox1, N'')) + LEN(ISNULL(@vsCheckbox2, N'')) + LEN(ISNULL(@vsCheckbox3, N'')) > 0 BEGIN DECLARE @lsCheckWhere NVARCHAR(MAX) ; SET @lsCheckWhere = N''; -- チェックボックス①検索条件 IF LEN(ISNULL(@vsCheckbox1, N'')) > 0 BEGIN SET @lsCheckWhere = @lsCheckWhere + N' AND ( CHECK_1 = ' + @vsCheckbox1 END -- チェックボックス②検索条件 IF LEN(ISNULL(@vsCheckbox2, N'')) > 0 BEGIN IF LEN(ISNULL(@lsCheckWhere, N'')) > 0 BEGIN SET @lsCheckWhere = @lsCheckWhere + N' OR CHECK_2 = ' + @vsCheckbox2 END ELSE BEGIN SET @lsCheckWhere = @lsCheckWhere + N' AND ( CHECK_2 = ' + @vsCheckbox2 END END -- チェックボックス③検索条件 IF LEN(ISNULL(@vsCheckbox3, N'')) > 0 BEGIN IF LEN(ISNULL(@lsCheckWhere, N'')) > 0 BEGIN SET @lsCheckWhere = @lsCheckWhere + N' OR CHECK_3 = ' + @vsCheckbox3 END ELSE BEGIN SET @lsCheckWhere = @lsCheckWhere + N' AND ( CHECK_3 = ' + @vsCheckbox3 END END SET @lsCheckWhere = @lsCheckWhere + N')'; END最後に変数「@lsCheckWhere」に条件が入りましたら、
この条件を予め作成しておいたSELECT分に結合するだけです。
よかったら参考にしてください。