sp_MSForEachDB
একটি বিকল্প হ'ল sp_MSforEachDB । এটি Undocumented তবে তবুও দরকারী
DECLARE @command varchar(1000)
SELECT @command =
'USE [?] UPDATE Table1 SET Field1 = ''ninjas'' WHERE Field2 = ''pirates'''
EXEC sp_MSforeachdb @command
ইন্টারভেস্টগুলির অনুসন্ধানে আরও অনেক উদাহরণ রয়েছে
দ্রষ্টব্য: একটি অসমর্থিত ফাংশন হওয়ার কারণে (যার কিছু পরিচিত বাগ রয়েছে) আপনি নিজের সংস্করণটি লিখতে চাইতে পারেন (ধন্যবাদ @ প্রদীপ)
উপরের এসকিউএল উদাহরণটির পুনর্গঠন করা দরকার:
DECLARE @findKeySQL nvarchar(2000)
DECLARE @searchKey nvarchar(20)
SET @searchKey = lower('%remote%')
SET @findKeySQL = 'IF ''[?]'' NOT IN (''[master]'', ''[model]'',
''[msdb]'', ''[tempdb]'')
select
so.name,
so.type,
@@ServerName as Server,
''?'' as DBName
from
[?].dbo.sysobjects so with (nolock)
join [?].sys.all_sql_modules sc with (nolock) on so.id = sc.object_id
where (lower(sc.definition) like ''' + @searchKey + ''')
group by so.name, so.type
order by so.type, so.name'
EXEC sp_MSForEachDB @findKeySQL
নোট:
- ? ক্যোয়ারিতে ডাটাবেসের নাম হিসাবে প্রতিস্থাপন করা হয়, সুতরাং কোন্ ডিবিয়ের বিরুদ্ধে এটি জিজ্ঞাসা করা উচিত তা স্পষ্টভাবে সংজ্ঞায়িত করতে কোয়েরিটি গঠন করুন
- সম্পূর্ণ মডিউল পাঠ্য হিসাবে sys.all_sql_modules ব্যবহার করতে সংশোধন করা হয়েছে ( সারিগুলিতে বিস্তৃত অবস্থায় পৌঁছানোর সময় সিসকম্টগুলি কীওয়ার্ডকে বিভক্ত করতে পারে )