2010-07-08 14 views
5

अद्यतन करें मेरे पास एकाधिक डेटाबेस वाले सर्वर हैं। मुझे इन डेटाबेस के माध्यम से लूप करने और प्रत्येक डेटाबेस में एक तालिका में एक रिकॉर्ड में एक मान बदलने की जरूरत है। यह कैसे किया जा सकता है?सर्वर पर डेटाबेस के माध्यम से लूप, और डेटा

उत्तर

8

आप गतिशील एसक्यूएल इस्तेमाल कर सकते हैं:

declare @query varchar(max) 
set @query = '' 

select @query = @query + 'UPDATE ' + name + 
      '.dbo.YourTable set value = 1 where id = 2; ' 
from master.sys.databases 
where name <> 'master' 

exec (@query) 
+0

धन्यवाद एंडोमर। मुझे लगता है कि यह 'sp_MSForEachDB' संग्रहीत प्रक्रिया की तुलना में मेरी स्थिति के लिए अधिक अनुकूल है क्योंकि मुझे प्रत्येक डेटाबेस के साथ और अधिक कस्टम होने की आवश्यकता हो सकती है। इस विधि का उपयोग करके मैं परिणाम प्राप्त करने के लिए एक लूप, और विभिन्न IF स्थितियां बना सकता हूं। धन्यवाद। – Curt

3

एक गैर-दस्तावेजी संग्रहीत प्रक्रिया sp_MSForEachDB जो प्रत्येक डेटाबेस के लिए एसक्यूएल निष्पादित करेंगे नहीं है।

EXEC sp_msforeachdb 'PRINT ''?''' 

? डेटाबेस नाम है।

11
EXEC sp_MSForEachDB ' Use ?; UPDATE ?.dbo.MyTable SET MyValue=999 ' 
संबंधित मुद्दे