निर्देशिका में सभी SQL फ़ाइलें चलाएँ


117

मेरे पास कई .sql फाइलें हैं जो मुझे SQL Server 2005 डेटाबेस पर अन्य डेवलपर्स द्वारा किए गए परिवर्तनों को लागू करने के लिए चलाना है। फ़ाइलों को निम्न पैटर्न के अनुसार नाम दिया गया है:

0001 - abc.sql
0002 - abcef.sql
0003 - abc.sql
...

क्या उन सभी को एक बार में चलाने का कोई तरीका है?

जवाबों:


143

निम्नलिखित कमांड के साथ एक .BAT फ़ाइल बनाएँ:

for %%G in (*.sql) do sqlcmd /S servername /d databaseName -E -i"%%G"
pause

यदि आपको उपयोगकर्ता नाम और पासवर्ड प्रदान करने की आवश्यकता है

for %%G in (*.sql) do sqlcmd /S servername /d databaseName -U username -P 
password -i"%%G"

ध्यान दें कि उपयोगकर्ता / पासवर्ड प्रदान करने पर "-ई" की आवश्यकता नहीं है

इस .BAT फ़ाइल को उस डायरेक्टरी में रखें जहाँ से आप .SQL फाइलें निष्पादित करना चाहते हैं, डबल .BAT फ़ाइल पर क्लिक करें और आप कर चुके हैं!


2
जब मैंने बैच फ़ाइल को निष्पादित किया तो कुछ प्रमाणीकरण समस्या यह कहती है कि "लॉगिन विफल रहा है। लॉगिन एक अविश्वसनीय डोमेन से है और इसे विंडोज प्रमाणीकरण के साथ नहीं किया जा सकता है।" क्या उपयोगकर्ता नाम और पासवर्ड भी सर्वर नाम और डेटाबेस प्रदान करने का एक तरीका है?
संजय महारजन

11
@SanjayMaharjan का उपयोग उपयोगकर्ता के लिए -U और पासवर्ड के लिए-जैसे,:for %%G in (*.sql) do sqlcmd /S servername /d databaseName -U username -P "password" -i"%%G"
रिकेडेब

मैं -o का उपयोग करके फ़ाइलों को अलग करने के लिए आउटपुट कैसे डाल सकता हूं? जब भी मैं -o temp.txt का उपयोग करता हूं, यह temp.txt ओवरराइट हो जाता है। मैं आउटपुट फ़ाइलों को उसी sql फ़ाइल नाम के रूप में प्राप्त करना चाहता हूं।
केविन

@vijeth: अच्छा काम आदमी। मैं एक एक करके कुछ 200 sql फाइल करने की सोच रहा था। समय की एक बहुत बचाया
Uthistran सेल्वराज

@ विजित धन्यवाद। मैं सिर्फ अपने लिए संशोधित करता हूं: REM REM डेवलपमेंट एनवायरनमेंट !! रेम पॉज़%% G के लिए (* .sql) do sqlcmd / S "192.168.10.139 \ SQLEXPRESS" / d "TESTDEV_DB" -U "atiour"--P "toiour" -i "%% G" पॉज़ REM रेम ऑल स्क्रिप्ट सफलतापूर्वक चलाएं REM
atik sarker

71

उपयोग के लिए । कमांड प्रॉम्प्ट से:

c:\>for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f"

2
मुझे पिछली "% f" के आसपास उद्धरण चिह्नों को जोड़ना पड़ा, ताकि यह स्क्रिप्ट के साथ काम कर सके जिसमें रिक्त स्थान हों
स्टीव राइट

एक संस्करण के लिए जो बैच फ़ाइलों में काम करता है, इस उत्तर को देखें ।
इयान केम्प

मुझे कुछ अन्य परमर्स भी जोड़ना था (जैसे / मुझे उद्धृत पहचानकर्ताओं को सक्षम करने के लिए)
Pavel K

मुझे यह पसंद है - लेकिन क्या किसी फ़ाइल में परिणाम आउटपुट करने का कोई तरीका है? तो मैं आसानी से किसी भी अपवाद देख सकते हैं? मैं सिर्फ 136 .sql फ़ाइलों पर इस आदेश की कोशिश की, तो मैं उनमें से ज्यादातर की दृश्यता खो दिया है
रिच

2
@Rich आउटपुट को फ़ाइल में रीडायरेक्ट करने के लिए, इस कमांड का उपयोग करें: for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f" >> sql.log 2>&1) आप यहाँ
danijelk

26
  1. SQL प्रबंधन स्टूडियो में एक नई क्वेरी खोलें और नीचे सभी फाइलें टाइप करें

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
  2. SQL प्रबंधन स्टूडियो पर क्वेरी मेनू पर जाएं और सुनिश्चित करें कि SQLCMD मोड सक्षम है
  3. SQLCMD मोड पर क्लिक करें; फ़ाइलों को नीचे के रूप में ग्रे में चुना जाएगा

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
  4. अब अमल करो

3
यह वास्तव में थकाऊ है अगर मेरे पास सैकड़ों फाइलें हैं।
डेविलिन ने

1
@devlincarnate: संभवतः आप चरण 1 को स्वचालित करने के तरीके के साथ आ सकते हैं। जैसे कि "dir / B * .sql> list.txt", और फिर उस list.txt फ़ाइल को थोड़ा सा मालिश करें।
जेफ रो

Windows के नए संस्करणों में @devlincarnate, आप Shift कुंजी दबाए रख सकते हैं, फ़ाइल पर राइट-क्लिक कर सकते हैं और "पथ पर कॉपी करें" का चयन कर सकते हैं। वहां से, CTRL + V एक SSMS विंडो में। यह कई फाइलों के साथ भी काम करता है। एक्सप्लोरर में दो या अधिक फ़ाइलों का चयन करें, किसी भी हाइलाइट की गई फ़ाइलों पर राइट-क्लिक करें, और "प्रतिलिपि के रूप में पथ" चुनें। SSMS में चरणों को दोहराएं। फ़ाइल पथ डबल-कोट्स में संलग्न हैं, जिन्हें आप ढूँढें / बदलें के साथ SSMS में स्ट्रिप आउट करना चाहते हैं या नहीं कर सकते हैं।
डेव मेसन

21

सुनिश्चित करें कि आपके पास प्रबंधन स्टूडियो में क्वेरी> SQLCMD मोड विकल्प पर क्लिक करके SQLCMD सक्षम है।

  1. मान लीजिए कि आपके पास script1.sql,script2.sql,script3.sql,script4.sqlएक फ़ोल्डर में चार .sql फाइलें ( ) हैं c:\scripts

  2. निम्नलिखित के साथ एक मुख्य स्क्रिप्ट फ़ाइल (Main.sql) बनाएँ:

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
    :r c:\Scripts\script4.sql

    Main.sql को c: \ script में ही सहेजें।

  3. ExecuteScripts.batनिम्नलिखित के साथ एक बैच फ़ाइल बनाएँ :

    SQLCMD -E -d<YourDatabaseName> -ic:\Scripts\Main.sql
    PAUSE

    <YourDatabaseName>उस डेटाबेस से प्रतिस्थापित करना याद रखें जिसे आप अपनी स्क्रिप्ट को निष्पादित करना चाहते हैं। उदाहरण के लिए, यदि डेटाबेस "कर्मचारी" है, तो कमांड निम्नलिखित होगी:

    SQLCMD -E -dEmployee -ic:\Scripts\Main.sql
    PAUSE
  4. बैच फ़ाइल को डबल क्लिक करके निष्पादित करें।


मैंने सिर्फ अपना उत्तर संपादित किया। इसके अलावा, किसी को यह सुनिश्चित करने की आवश्यकता है कि स्क्रिप्ट फ़ाइलें निर्दिष्ट पथ में मौजूद हैं।
आशीष गुप्ता

इस दृष्टिकोण के बारे में अच्छी बात यह है कि कोई भी त्रुटि पाई जाती है तो आगे की स्क्रिप्ट निष्पादित करना बंद करें :) -bउदाहरण के लिए:SQLCMD -b -i "file 1.sql","file 2.sql"
17

और इस दृष्टिकोण के बारे में बुरी बात यह है कि किसी को चलाने के लिए सभी SQL फ़ाइलों की सूची बनाए रखना होगा।
फ्रांसिस्को डी'नकोनिया

10

आप ApexSQL प्रोपेगेट का उपयोग कर सकते हैं । यह एक मुफ़्त उपकरण है जो कई डेटाबेस पर कई स्क्रिप्ट निष्पादित करता है। आप जितनी भी ज़रूरत हो, उतने स्क्रिप्ट का चयन कर सकते हैं और उन्हें एक या कई डेटाबेस (यहां तक ​​कि कई सर्वर) के खिलाफ निष्पादित कर सकते हैं। आप स्क्रिप्ट सूची बना सकते हैं और उसे सहेज सकते हैं, फिर बस उस सूची का चयन करें जिसे आप हर बार बनाए गए क्रम में उन्हीं लिपियों को निष्पादित करना चाहते हैं (एकाधिक स्क्रिप्ट सूचियों को भी जोड़ा जा सकता है):

स्क्रिप्ट का चयन करें

जब स्क्रिप्ट और डेटाबेस का चयन किया जाता है, तो उन्हें मुख्य विंडो में दिखाया जाएगा और आपको बस "निष्पादित" बटन पर क्लिक करना होगा और सभी स्क्रिप्ट को दिए गए क्रम में चयनित डेटाबेस पर निष्पादित किया जाएगा:

लिपियों का निष्पादन


8

सामान्य क्वेरी

नाम बैच के साथ नोटपैड में नीचे की पंक्तियों को सहेजें। फ़ोल्डर के अंदर जगह और जगह जहां आपकी सभी स्क्रिप्ट फ़ाइल है

 for %%G in (*.sql) do sqlcmd /S servername /d databasename  -i"%%G"
    pause

उदाहरण

%% G के लिए (* .sql) sqlcmd / S NFGDDD23432 / d EMPLYEEDB -i "%% G" रोकें

यदि आपके लिए लॉगिन विफल हो गया है, तो कृपया नीचे दिए गए कोड का उपयोग उपयोगकर्ता नाम और पासवर्ड के साथ करें

for %%G in (*.sql) do sqlcmd /S SERVERNAME /d DBNAME -U USERNAME -P PASSWORD -i"%%G"
pause

%% G के लिए (* .sql) sqlcmd / S NE8148server / d EMPLYEEDB -U स्कॉट पी- टाइगर -आई "%% G" विराम दें

आपके द्वारा उस फ़ोल्डर के अंदर बैट फ़ाइल बनाने के बाद जिसमें आपकी स्क्रिप्ट फाइलें हैं, बस उस बैट फ़ाइल पर क्लिक करें जिसे आपकी स्क्रिप्ट निष्पादित हो जाएगी


5

मैंने C # में एक ओपन सोर्स यूटिलिटी लिखी है जो आपको कई एसक्यूएल फाइल्स को ड्रैग और ड्रॉप करने की अनुमति देता है और उन्हें एक डेटाबेस के खिलाफ चलाना शुरू करता है।

उपयोगिता में निम्नलिखित विशेषताएं हैं:

  • स्क्रिप्ट फ़ाइलों को खींचें और छोड़ें
  • स्क्रिप्ट फ़ाइलों की निर्देशिका चलाएँ
  • Sql स्क्रिप्ट बाहर निष्पादन के दौरान संदेश डाल दिया
  • स्क्रिप्ट पास हो गई या विफल हो गई जो हरे और लाल रंग की हैं (चलाने के लिए पीले)
  • त्रुटि विकल्प पर रोकें
  • त्रुटि विकल्प पर स्क्रिप्ट खोलें
  • प्रत्येक स्क्रिप्ट के लिए समय के साथ रिपोर्ट चलाएँ
  • कुल अवधि का समय
  • DB कनेक्शन का परीक्षण करें
  • asynchronus
  • .Net 4 और SQL 2008 के साथ परीक्षण किया गया
  • एकल exe फ़ाइल
  • कभी भी कनेक्शन को मार डालो

4

मैंने पाया सबसे आसान तरीका निम्नलिखित चरणों में शामिल है (केवल आवश्यकता Win7 + में है):

  • एक्सप्लोरर में फ़ोल्डर खोलें
  • सभी स्क्रिप्ट फ़ाइलों का चयन करें
  • शिफ़्ट को दबाएं
  • राइट सेलेक्शन पर क्लिक करें और "Copy as path" चुनें
  • SQL सर्वर प्रबंधन स्टूडियो में जाएं
  • एक नई क्वेरी बनाएँ
  • क्वेरी मेनू, "SQLCMD मोड"
  • सूची पेस्ट करें, फिर Ctrl + H, ': r "C:' के साथ '' C: \ '(या जो भी ड्राइव अक्षर है) बदलें (यानी': r 'के साथ लाइनों को उपसर्ग करें)
  • क्वेरी चलाएँ

यह लंबा लगता है, लेकिन वास्तव में बहुत तेज है .. (यह तब तक लगता है जब मैंने सबसे छोटे चरणों का वर्णन किया है)


2

मुझे पता है कि आप कई sql फ़ाइलों को निष्पादित करने के लिए osql या sqlcmd कमांड का उपयोग कर सकते हैं। दोष यह है कि आपको दोनों कमांड के लिए एक स्क्रिप्ट बनानी होगी।

एकाधिक SQL सर्वर लिपियों को निष्पादित करने के लिए SQLCMD का उपयोग करना

OSQL (यह sql सर्वर 2000 के लिए है)

http://msdn.microsoft.com/en-us/library/aa213087(v=SQL.80).aspx


1
@echo off
cd C:\Program Files (x86)\MySQL\MySQL Workbench 6.0 CE

for %%a in (D:\abc\*.sql) do (
echo %%a
mysql --host=ip --port=3306 --user=uid--password=ped < %%a
)

Step1: उपरोक्त पंक्तियाँ नोट पैड में कॉपी होती हैं, इसे बल्ले के रूप में सहेजते हैं

Step2: dl abc फोल्डर में सभी Sql फाइल्स को sql सर्वर में निष्पादित प्रश्नों में।

स्टेप 3: अपना आईपी, यूजर आईडी और पासवर्ड दें।


यह प्रश्न MSSQL से संबंधित है, MySQL से नहीं।
शॉन

0

आप एक एकल स्क्रिप्ट बना सकते हैं जो अन्य सभी को कॉल करती है।

निम्नलिखित को एक बैच फ़ाइल में रखें:

@echo off
echo.>"%~dp0all.sql"
for %%i in ("%~dp0"*.sql) do echo @"%%~fi" >> "%~dp0all.sql"

जब आप उस बैच फ़ाइल को चलाते हैं तो यह all.sqlउसी निर्देशिका में नाम से एक नई स्क्रिप्ट बनाएगा जहाँ बैच फ़ाइल स्थित है। यह .sqlउसी निर्देशिका में एक्सटेंशन वाली सभी फ़ाइलों को खोजेगा जहां बैच फ़ाइल स्थित है।

आप स्क्रिप्ट बनाने के बाद sqlplus user/pwd @all.sqlकॉल sqlplusकरने के लिए (या बैच फ़ाइल का विस्तार करके ) सभी स्क्रिप्ट चला सकते हैंall.sql


0

प्रत्येक SQLfile को उसी निर्देशिका पर निष्पादित करने के लिए निम्नलिखित कमांड का उपयोग करें:

ls | awk '{print "@"$0}' > all.sql

यह कमांड "@" द्वारा संलग्न निर्देशिका में हर SQL फ़ाइल के नाम के साथ एक एकल SQL फ़ाइल बनाएगी।

SQLPlus के साथ all.sqlबस निष्पादित होने के बाद all.sql, यह प्रत्येक sql फ़ाइल को निष्पादित करेगा all.sql


0

यदि आप इंटरएक्टिव एसक्यूएल का उपयोग कर सकते हैं:

1 - इस कोड के साथ एक .BAT फ़ाइल बनाएँ:

@ECHO OFF ECHO
for %%G in (*.sql) do dbisql -c "uid=dba;pwd=XXXXXXXX;ServerName=INSERT-DB-NAME-HERE" %%G
pause

2 - pwd और ServerName बदलें।

3 - .BAT फ़ाइल को उस फ़ोल्डर में रखें जिसमें .SQL फाइलें हों और उसे चलाएं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.