आप ओएसक्ल या बेहतर अभी तक नए एसक्यूएलसीएमडी का उपयोग कर सकते हैं। मैं इस उदाहरण में ओएसक्ल का उपयोग कर रहा हूं क्योंकि मेरे पास कोड कोड नमूना हुआ था लेकिन उत्पादन में मैं sqlcmd का उपयोग कर रहा हूं। डाटाबेस के खिलाफ अद्यतन स्क्रिप्ट चलाने के लिए उपयोग की जाने वाली एक बड़ी प्रक्रिया के बाहर कोड का एक स्निप किया गया है। उन्हें प्रमुख, नाबालिग, रिलीज, बिल्डिंग द्वारा आदेश दिया जाता है क्योंकि रिलीज ट्रैक करने के लिए उस सम्मेलन का उपयोग करके मैं अपनी स्क्रिप्ट का नाम देता हूं। आप स्पष्ट रूप से मेरे सभी त्रुटि हैंडिंग को खो रहे हैं, जिन हिस्सों में मैं डेटाबेस, सेटअप चर, आदि से उपलब्ध स्क्रिप्ट खींचता हूं लेकिन आपको अभी भी यह स्निपेट उपयोगी हो सकता है।
ओएसक्ल या एसक्यूएलसीएमडी का उपयोग करने के बारे में मुझे मुख्य भाग यह है कि आप इस कोड को एसएसएमएस में चला सकते हैं, या संग्रहीत प्रक्रिया (जिसे निर्धारित समय पर बुलाया जा सकता है) या बैच फ़ाइल से चला सकते हैं। बहुत लचीला।
--Use cursor to run upgrade scripts
DECLARE OSQL_cursor CURSOR
READ_ONLY
FOR SELECT FileName
FROM #Scripts
ORDER BY Major, Minor, Release, Build
OPEN OSQL_cursor
FETCH NEXT FROM OSQL_cursor INTO @name
WHILE (@@fetch_status <> -1)
BEGIN
IF ((@@fetch_status <> -2) AND (@result = 0))
BEGIN
SET @CommandString = 'osql -S ' + @@ServerName + ' -E -n -b -d ' + @DbName + ' -i "' + @Dir + @name + '"'
EXEC @result = master.dbo.xp_cmdshell @CommandString, NO_OUTPUT
IF (@result = 0)
BEGIN
SET @Seconds = DATEDIFF(s, @LastTime, GETDATE())
SET @Minutes = @Seconds/60
SET @Seconds = @Seconds - (@Minutes * 60)
PRINT 'Successfully applied ' + @name + ' in ' + cast(@Minutes as varchar)
+ ' minutes ' + cast(@Seconds as varchar) + ' seconds.'
SET @LastTime = GETDATE()
END
ELSE
BEGIN
SET @errMessage = 'Error applying ' + @name + '! The database is in an unknown state and the schema may not match the version.'
SET @errMessage = @errMessage + char(13) + 'To find the error restore the database to version ' + @StartingVersion
SET @errMessage = @errMessage + ', set @UpToVersion = the last version successfully applied, then run ' + @name
SET @errMessage = @errMessage + ' manually in Query Analyzer.'
END
IF @name = (@UpToVersion + '.sql')
GOTO CleanUpCursor --Quit if the final script specified has been run.
END
FETCH ENDT FROM OSQL_cursor INTO @name
END
स्रोत
2011-03-08 19:34:45
जब आप कहते हैं स्क्रिप्ट आप एक sql फ़ाइल मतलब है? –
हाँ, मेरा मतलब एक .sql फ़ाइल है। धन्यवाद! –