動的SQL文の基本構文
1: 通常のSQL文はExecで実行可能
例: select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 文字列の前に N を追加する必要があることに注意してください
2: フィールド名、テーブル名、データベース名などを変数として使用する場合は動的SQLを使用する必要があります
例えば:
@fname varchar(20) を宣言します
set @fname = 'ファイル名'
select @fname from tableName -- エラー。エラーは表示されませんが、結果は固定値の FiledName になり、これは希望するものではありません。
Exec('select ' + @fname + ' from tableName') -- プラス記号の前後の一重引用符の周囲にスペースがあることに注意してください。
もちろん、文字列を変数形式に変更することもできます
@fname varchar(20) を宣言します
set @fname = 'FiledName' -- フィールド名を設定します
@s varchar(1000) を宣言します
set @s = 'テーブル名から ' + @fname + ' を選択'
Exec(@s) -- 成功
exec sp_executesql @s -- この文はエラーを報告します
cancel @s Nvarchar(1000) -- nvarchar(1000) に変更されることに注意してください。
set @s = 'テーブル名から ' + @fname + ' を選択'
Exec(@s) -- 成功
exec sp_executesql @s -- この文は正しいです
3. 出力パラメータ
@num int を宣言し、
@sqls nvarchar(4000)
set @sqls='テーブル名からカウント(*)を選択'
実行(@sqls)
--execの実行結果を変数に入れるにはどうすればよいでしょうか?
@num int を宣言し、
@sqls nvarchar(4000)
set @sqls='テーブル名から @a=count(*) を選択します '
exec sp_executesql @sqls,N'@a int 出力',@num 出力
@numを選択
SQL ステートメント文字列で一重引用符 '' を使用する場合は、'''' を使用できます。