プロシージャ内でバインド変数を使用して動的に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;