SQLServerで、動的SQLでSELECTした結果を変数にセットするサンプルです。
sp_executesqlを使用します。
構文
- (sp_executesql構文)
- sp_executesql <SQL>, <パラメータ定義>, <パラメータ設定>
引数 | 説明 |
---|---|
<SQL> | 実行するSQL文の文字列を指定する ※nvarchar型を使用する必要あり。 |
<パラメータ定義> | SQL文中で使用するパラメータの定義を文字列で指定する ※nvarchar型を使用する必要あり。 |
<パラメータ設定> | 定義したパラメータの設定を行う (IN用パラメータなら値の代入、OUT用パラメータならOUTPUTとして宣言) |
サンプル
例として以下のテーブルを使用します。
code | name | age |
---|---|---|
101 | 織田信長 | 47 |
102 | 豊臣秀吉 | 61 |
103 | 徳川家康 | 73 |
例1)動的SQLで結果を変数にセットする例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
--変数定義 DECLARE @sql nvarchar(max); --SQL文用 DECLARE @para nvarchar(max); --パラメータ用 DECLARE @aa VARCHAR(100); --OUT用変数1 DECLARE @bb INT; --OUT用変数2 --動的SQL SET @sql = N'select @aa = name, @bb = age from m_user where code = ''101'' '; --値受け取り用の変数定義 SET @para = N'@aa varchar(100) OUTPUT, @bb int OUTPUT'; --動的SQL実行 EXECUTE sp_executesql @sql, @para, @aa OUTPUT, @bb OUTPUT; --結果表示 print @aa; print @bb; |
- (結果)
- 織田信長 47
例2)動的SQLで結果を変数にセットする例(INパラメータも使用)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
--変数定義 DECLARE @sql nvarchar(max); --SQL文用 DECLARE @para nvarchar(max); --パラメータ用 DECLARE @aa VARCHAR(100); --OUT用変数1 DECLARE @bb INT; --OUT用変数2 DECLARE @xx varchar(100); --IN用変数 SET @xx = '102' --INパラメータ --動的SQL SET @sql = N'select @aa = name, @bb = age from m_user where code = @xx '; --値受け取り用の変数定義 SET @para = N'@aa varchar(100) OUTPUT, @bb int OUTPUT, @xx varchar(100)'; --動的SQL実行 EXECUTE sp_executesql @sql, @para, @aa OUTPUT, @bb OUTPUT, @xx; --結果表示 print @aa; print @bb; |
- (結果)
- 豊臣秀吉 61
備考
- 複数件SELECTされた場合でもエラーにはならずに最初の1件の値が変数にセットされます。