SSMS WILL NOT、IのREPEAT、WILL NOTの A使用するコマンドYOU RUNでの動的SQLの内容に切り替えます。
選択したデータベース内で他の動的SQLを実行することが最終的な目標である場合、これは十分簡単です。
DECLARE @db sysname = N'db1';
DECLARE @exec nvarchar(max) = QUOTENAME(@db) + N'.sys.sp_executesql',
@sql nvarchar(max) = N'SELECT DB_NAME();';
EXEC @exec @sql;
パラメータを渡す必要がある場合、問題ありません:
DECLARE @db sysname = N'db1', @i int = 1;
DECLARE @exec nvarchar(max) = QUOTENAME(@db) + N'.sys.sp_executesql',
@sql nvarchar(max) = N'SELECT DB_NAME(), @i;';
EXEC @exec @sql, N'@i int', @i;
選択したデータベース内で静的 SQL を実行することが目的である場合は、その静的SQLを各データベースのストアドプロシージャに格納し、次のように動的に呼び出すことを検討する必要があります。
DECLARE @db sysname = N'db1';
DECLARE @exec nvarchar(max) = QUOTENAME(@db) + N'.sys.sp_executesql',
@sql nvarchar(max) = N'EXEC dbo.procedurename;';
EXEC @exec @sql;
そして、うまくいけば、最終的な目標は、SSMSでこのコードをすべて実行することではなく、SSMSが次のコンテキストで実行される@db
ようにすることです。