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

プロシージャ内でバインド変数を使用して動的にSQLを実行し、戻り値を取得する方法

 
文書番号:20528




プロシージャ内で動的に作成したSQLにバインド変数を指定して実行し、戻り値を取得する方法です。
SQL文自体は変わらないのでループして何度も実行する場合などは効率がいいです。

【実行手順】

  • 動的SQLを実行し、その結果を取得します。
    以下の例では変数への値は固定で書いていますが実際には変数などで指定すると思います。

    出力する変数には「OUTPUT」キーワードを指定します。
    
    
    --SQLを作成する変数宣言
    DECLARE @SQL nvarchar(2000);
    
    --バインド変数を定義するSQLを作成する変数宣言
    DECLARE @SQL_PARAM nvarchar(2000);
    
    --バインド変数用の変数宣言
    DECLARE @p_code char(4);
    DECLARE @p_name varchar(50);
    DECLARE @p_price decimal(18,0);
    
    --SQL を実行して戻り値を取得する変数宣言
    DECLARE @o_name varchar(50);
    DECLARE @o_price decimal(18,0);
    
    --実行するSQLを作成する
    SET @SQL = N'';
    SET @SQL = @SQL + N' SELECT @p_name  = name' ;
    SET @SQL = @SQL + N'       ,@p_price = price' ;
    SET @SQL = @SQL + N' FROM   TAB_A';
    SET @SQL = @SQL + N' WHERE  code = @p_code';
    
    --バインド変数のパラメーターSQLを作成する
    SET @SQL_PARAM = N'';
    SET @SQL_PARAM = @SQL_PARAM + N' @p_code char(4)';
    SET @SQL_PARAM = @SQL_PARAM + N',@p_name  varchar(50)   OUTPUT';
    SET @SQL_PARAM = @SQL_PARAM + N',@p_price decimal(18,0) OUTPUT';
    
    --SQL を実行する
    EXEC sp_executesql @SQL,@SQL_PARAM,@p_code  = '0001'
                                      ,@p_name  = @o_name  OUTPUT
                                      ,@p_price = @o_price OUTPUT;
    
    

【参考情報】

[TechNet] sp_executesql の使用
https://technet.microsoft.com/ja-jp/library/ms175170(v=sql.105).aspx