SQL を動的に作成してカーソルで使用する方法
文書番号:20623
SELECT した結果をカーソルを使用してループ処理をする方法
では SQL を定義してその実行結果をカーソルでループして使用しました。
カーソルで使用する SQL が動的に変わる場合、文字列で SQL を作成して実行できます。
【実行手順】
-
@SQL 変数で 動的に SELECT文を作成してカーソルを実行します。
--SQL を作成する変数宣言 DECLARE @SQL nvarchar(max) --カーソルの値を取得する変数宣言 DECLARE @W_COL1 varchar(50) DECLARE @W_COL2 decimal(18,0) --カーソルを実行するSQLを作成する SET @SQL = N''; SET @SQL = @SQL + N' SELECT COL1,COL2'; SET @SQL = @SQL + N' FROM ' + 変数によって変わるテーブル名; SET @SQL = @SQL + N' WHERE ' + 条件設定; SET @SQL = @SQL + N' ORDER BY COL1'; --カーソル定義 EXECUTE (' DECLARE CUR_AAA CURSOR FOR ' + @SQL); --カーソルオープン OPEN CUR_AAA; --最初の1行目を取得して変数へ値をセット FETCH NEXT FROM CUR_AAA INTO @W_COL1,@W_COL2; --データの行数分ループ処理を実行する WHILE @@FETCH_STATUS = 0 BEGIN -- ========= ループ内の実際の処理 ここから=== INSERT INTO TAB_B VALUES ( @W_COL1 ,@W_COL2 ) -- ========= ループ内の実際の処理 ここまで=== --次の行のデータを取得して変数へ値をセット FETCH NEXT FROM CUR_AAA INTO @W_COL1,@W_COL2; END --カーソルを閉じる CLOSE CUR_AAA; DEALLOCATE CUR_AAA;