HOME >> Tips >> SQL Server Tips >> SQL

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;