SSMS DİNAMİK SQL'DE ÇALIŞTIĞINIZ BİR KULLANIM KOMUTUNUN BAĞLAMACAĞINI TEKRAR ETMEYECEKTİR .
Nihai hedef, seçilen veritabanı içinde başka bir dinamik SQL yürütmekse, bu yeterince kolaydır:
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;
Parametreleri geçmeniz gerekiyorsa, sorun yok:
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;
Hedef, seçilen veritabanı içinde bazı statik SQL yürütmekse , belki bu statik SQL'i her veritabanındaki saklı yordamda saklamayı ve dinamik olarak şöyle çağırmayı düşünmelisiniz:
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;
Ve umarım nihai hedef SSMS'de tüm bu kodları çalıştırmak değildir, böylece SSMS şu an bağlamdadır @db
...