এসএসএমএস, আমি পুনরায় বলব না, আপনি ডায়ামানিক এসকিউএলে চালিত কোনও ব্যবহারকারীর আদেশের কন্টেন্টে স্যুইচ করবেন না ।
যদি চূড়ান্ত লক্ষ্যটি নির্বাচিত ডাটাবেসের ভিতরে অন্য কিছু গতিশীল এসকিউএল চালানো হয় তবে এটি যথেষ্ট সহজ:
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;
যদি লক্ষ্যটি নির্বাচিত ডাটাবেসের অভ্যন্তরে কিছু স্থিতিশীল এসকিউএল চালানো হয় , তবে আপনার সেই স্ট্যাটিক এসকিউএল প্রতিটি ডাটাবেসে একটি সঞ্চিত পদ্ধতিতে সংরক্ষণ করার এবং এটিকে গতিশীলভাবে কল করার কথা বিবেচনা করা উচিত:
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;
এবং আশা করা যায় চূড়ান্ত লক্ষ্য এসএসএমএসে এই সমস্ত কোডটি চালানো নয় যাতে এসএসএমএস এখন প্রসঙ্গে আছে @db
... ড্যানিয়েল সত্যিই এটি পছন্দ করবে যদি আমি স্পষ্টভাবে বলি যে এটি সম্ভব নয়, যেমন @ লোথারের মন্তব্যে আরও বলা হয়েছে।