システム開発ブログ

【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分に結合するだけです。
よかったら参考にしてください。
システムのトラブル解決を承ります。すぐにシステムリフォームを体験できますシステム診断・システムリフォームのお申し込みはこちらから。

システム開発ブログ

Twitterでilovex_officialをフォローしてください

最近の記事

カテゴリー

部署

月別アーカイブ

以前の部署別ブログ

ページのトップ