स्क्रिप्ट के साथ बैच फ़ाइल बनाएं (फ़ॉर्मेटिंग के बारे में खेद है, लेकिन यह वास्तव में बैच निष्पादित करने के लिए इनलाइन होना चाहिए):
osql -U %1 -P %2 -S %3 -d %4 -h-1 -Q "SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.Routines WHERE ROUTINE_TYPE = 'PROCEDURE'" -n -o "sp_list.txt"
for /f %%a in (sp_list.txt) do osql -U %1 -P %2 -S %3 -d %4 -h-1 -Q "SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.Routines WHERE ROUTINE_NAME = '%%a'" -n -o "%%a.sql"
इसे "run.bat" नाम दें। अब, बैच का उपयोग करने के लिए पैराम्स का उपयोग करें:
run.bat [उपयोगकर्ता नाम] [पासवर्ड] [सर्वरनाम] [डेटाबेस]
उदाहरण के लिए:
run.bat sa pwd111 localhost\SQLEXPRESS मास्टर
पहले सभी संग्रहीत कार्यविधि नाम फ़ाइल sp_list.txt में संग्रहीत किए जाएंगे, फिर एक-एक करके अलग-अलग स्क्रिप्ट फ़ाइलों में। एकमात्र मुद्दा - परिणाम गणना के साथ प्रत्येक स्क्रिप्ट की अंतिम पंक्ति - मैं इस पर काम कर रहा हूं :)
संपादित :क्वेरी में बग ठीक किया गया
"पंक्तियों से प्रभावित" लाइन को हटाया जा रहा है
ठीक है, अब हमें एक और बैच बनाने की आवश्यकता है:
type %1 | findstr /V /i %2 > xxxtmpfile
copy xxxtmpfile %1 /y /v
del xxxtmpfile
इसे "line_del.bat" नाम दें। देखें, पहला परम फाइल टू प्रोसेस है, दूसरा - स्ट्रिंग को हटाने के लिए लाइनों को खोजने के लिए। अब मुख्य बैच को संशोधित करें (फिर से, स्वरूपण के लिए खेद है):
osql -U %1 -P %2 -S %3 -d %4 -h-1 -Q "SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.Routines WHERE ROUTINE_TYPE = 'PROCEDURE'" -n -o "sp_list.txt"
call line_del sp_list.txt "rows affected"
call line_del sp_list.txt "row affected"
for /f %%a in (sp_list.txt) do osql -U %1 -P %2 -S %3 -d %4 -h-1 -Q "SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.Routines WHERE ROUTINE_NAME = '%%a'" -n -o "%%a.sql"
for /f %%a in (sp_list.txt) do call line_del %%a.sql "rows affected"
for /f %%a in (sp_list.txt) do call line_del %%a.sql "row affected"
संबंधित लेख देखें:
बैच परिवेश में सरल प्रोग्रामिंग कमांड
osql Utility
MSSQL :आप कोड के साथ संग्रहित प्रक्रिया निर्माण को कैसे स्क्रिप्ट करते हैं?
txt फ़ाइल की कुछ पंक्तियों को बैच फ़ाइल के माध्यम से हटाएँ
:) आप देख सकते हैं, अंतिम दो SO से हैं!