SSMS WILL NICHT, ich wiederhole, WILL NOT SWITCH TO Kontext eines USE - Befehl Sie führen in dynamischen SQL.
Wenn das ultimative Ziel darin besteht, ein anderes dynamisches SQL in der ausgewählten Datenbank auszuführen, ist dies einfach genug:
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;
Wenn Sie Parameter übergeben müssen, kein Problem:
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;
Wenn das Ziel darin besteht, statisches SQL in der ausgewählten Datenbank auszuführen , sollten Sie dieses statische SQL möglicherweise in einer gespeicherten Prozedur in jeder Datenbank speichern und dynamisch wie folgt aufrufen:
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;
Und hoffentlich ist das ultimative Ziel nicht, den gesamten Code in SSMS auszuführen, nur damit SSMS jetzt im Kontext von @db
... Daniel würde es wirklich mögen, wenn ich ausdrücklich sage, dass dies nicht möglich ist, wie auch der Kommentar von @ Lothar sagte.