Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

बैच के माध्यम से SQL संग्रहीत कार्यविधियों को .sql फ़ाइलों में कैसे सहेजें

स्क्रिप्ट के साथ बैच फ़ाइल बनाएं (फ़ॉर्मेटिंग के बारे में खेद है, लेकिन यह वास्तव में बैच निष्पादित करने के लिए इनलाइन होना चाहिए):

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 से हैं!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. अल्पविराम से अलग सूची में एक तालिका से प्राथमिक कुंजी खोजें

  2. SQL सर्वर 2008 में लीड () और एलएजी () कार्यक्षमता

  3. इनर जॉइन जहां क्लॉज

  4. तारीख को केवल घंटे/मिनट तक छोटा करें

  5. SQL सर्वर 2008:एकाधिक दिनांक सीमाओं में कुंजियों की संख्या गिनें