sp_MSForEachDB
एक विकल्प sp_MSForEachDB है । यह अनिर्दिष्ट है लेकिन फिर भी उपयोगी नहीं है
DECLARE @command varchar(1000)
SELECT @command =
'USE [?] UPDATE Table1 SET Field1 = ''ninjas'' WHERE Field2 = ''pirates'''
EXEC sp_MSforeachdb @command
इंटरव्यू की एक खोज के कई और उदाहरण भी हैं
नोट: एक असमर्थित फ़ंक्शन (जिसमें कुछ ज्ञात बग हैं) होने के नाते आप अपना स्वयं का संस्करण लिखना चाहते हैं (धन्यवाद @ प्रदीप)
ऊपर दिए गए SQL उदाहरण का पुनर्गठन इस प्रकार करना होगा:
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
टिप्पणियाँ:
- ? डेटाबेस नाम के रूप में क्वेरी में प्रतिस्थापित किया जाता है, इसलिए क्वेरी को स्पष्ट रूप से परिभाषित करने के लिए कि किस DB के विरुद्ध क्वेरी करना है, संरचना करें
- पूर्ण मॉड्यूल पाठ रखने के लिए sys.all_sql_modules का उपयोग करने के लिए संशोधित ( पंक्तियों पर फैले तक पहुँचने पर syscomments कीवर्ड को विभाजित कर सकता है )