देखो स्क्रिप्ट के साथ बैच फ़ाइल बनाएँ (प्रारूपित करने के बारे में खेद है, लेकिन यह वास्तव में बैच निष्पादित करने के लिए इनलाइन होना चाहिए है):
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 [उपयोगकर्ता नाम] [पासवर्ड] [servername] [डेटाबेस] उदाहरण पर
:
run.bat सा pwd111 स्थानीय होस्ट \ 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"
देखें संबंधित लेख:
Simple programming commands in a batch environment
osql Utility
MSSQL: How do you script Stored Procedure creation with code?
Delete certain lines in a txt file via a batch file
:) आप देख सकते हैं, पिछले दो से कर रहे हैं अब मुख्य बैच (फिर से, प्रारूपित करने के बारे में खेद है) को संशोधित इसलिए!
स्रोत
2009-02-20 16:04:23
बहुत बहुत धन्यवाद! मैंने थोड़ा सा प्रयास किया है, लेकिन प्रमाणीकरण के साथ कुछ समस्याएं हैं (osql cant connect)। मैं इसे अगले दिन कोशिश करूँगा ... सबसे अच्छा – seansilver
क्या बड़ी प्रोसेस के लिए यह ब्रेक नहीं होगा? जब मैं चलाता हूं: ROUTINE_NAME, अधिकतम (लेन (ROUTINE_DEFINITION) चुनें, INFORMATION_SCHEMA.Routines ROUTINE_NAME द्वारा समूह 2 desc द्वारा क्रमबद्ध करें; मुझे बहुत सारी प्रोसेस मिलती हैं जो 4000 वर्ण हैं। सही डेटा प्राप्त करने के लिए आपको निश्चित रूप से sys.com से बाहर निकालना होगा। – jcollum
ओह, यह ऊपर टिप्पणी में syscomments होना चाहिए। – jcollum