Uruchom wszystkie pliki SQL w katalogu

117

Mam wiele plików .sql, które muszę uruchomić, aby zastosować zmiany wprowadzone przez innych programistów w bazie danych SQL Server 2005. Pliki są nazywane zgodnie z następującym wzorcem:

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

Czy jest sposób, aby uruchomić je wszystkie za jednym zamachem?

KAD
źródło

Odpowiedzi:

143

Utwórz plik .BAT za pomocą następującego polecenia:

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

Jeśli musisz podać nazwę użytkownika i hasło

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

Zauważ, że "-E" nie jest potrzebne, gdy podano użytkownika / hasło

Umieść ten plik .BAT w katalogu, z którego mają być wykonywane pliki .SQL, kliknij dwukrotnie plik .BAT i gotowe!

Vijeth
źródło
2
po uruchomieniu pliku wsadowego pojawia się problem z uwierzytelnianiem, który mówi: „Logowanie nie powiodło się. Logowanie pochodzi z niezaufanej domeny i nie może być używane z uwierzytelnianiem systemu Windows.”. Czy istnieje sposób na podanie nazwy użytkownika i hasła, podobnie jak nazwa serwera i baza danych?
Sanjay Maharjan
11
@SanjayMaharjan użyj -U dla użytkownika i -P jako hasła, na przykład:for %%G in (*.sql) do sqlcmd /S servername /d databaseName -U username -P "password" -i"%%G"
Rickedb
jak mogę umieścić dane wyjściowe w osobnych plikach za pomocą -o? za każdym razem, gdy używam jak -o temp.txt, ten temp.txt jest nadpisywany. Chcę, aby pliki wyjściowe miały taką samą nazwę pliku sql.
kevin
@vijeth: dobra robota człowieku. myślałem o zrobieniu po kolei około 200 plików sql. zaoszczędził dużo czasu
Uthistran Selvaraj
@Vijeth dziękuję. po prostu zmodyfikowałem dla siebie: tylko środowisko programistyczne REM REM !! Przerwa REM dla %% G in (* .sql) do sqlcmd / S "192.168.10.139 \ SQLEXPRESS" / d "TESTDEV_DB" -U "atiour" -P "atiour" -i "%% G" pauza REM REM Cały skrypt Uruchom pomyślnie REM
atik sarker
71

Użyj dla . W wierszu polecenia:

c:\>for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f"
Remus Rusanu
źródło
2
Musiałem dodać cudzysłowy wokół ostatniego „% f”, aby działało ze skryptami zawierającymi spacje
Steve Wright
Wersja, która działa w plikach wsadowych, znajduje się w tej odpowiedzi .
Ian Kemp
Musiałem też dodać kilka innych parametrów (np. / I aby włączyć cytowane identyfikatory)
Pavel K
Podoba mi się ten - ale czy istnieje sposób, aby wyniki były przesyłane do pliku? więc mogę łatwo zobaczyć wyjątki? właśnie wypróbowałem to polecenie na 136 plikach .sql, więc większość z nich straciłam widoczność
Rich
2
@Rich Aby przekierować wyjście do pliku, użyj tego polecenia: for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f" >> sql.log 2>&1) Możesz przeczytać więcej o przekierowaniu wyjścia tutaj
danijelk
26
  1. W SQL Management Studio otwórz nowe zapytanie i wpisz wszystkie pliki jak poniżej

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
  2. Przejdź do menu Zapytanie w programie SQL Management Studio i upewnij się, że tryb SQLCMD jest włączony
  3. Kliknij Tryb SQLCMD; pliki zostaną zaznaczone na szaro, jak poniżej

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
  4. Teraz wykonaj
Ramakrishna Talla
źródło
3
jest to naprawdę uciążliwe, jeśli mam setki plików.
devlin carnate
1
@devlincarnate: Prawdopodobnie możesz wymyślić sposób na zautomatyzowanie kroku 1. Na przykład „dir / B * .sql> list.txt”, a następnie trochę wmasować w ten plik list.txt.
Jeff Roe
@devlincarnate w nowszych wersjach systemu Windows możesz przytrzymać klawisz Shift, kliknąć plik prawym przyciskiem myszy i wybrać opcję „Kopiuj jako ścieżkę”. Stamtąd CTRL + V w oknie SSMS. Działa również z wieloma plikami. Wybierz dwa lub więcej plików w Eksploratorze, kliknij prawym przyciskiem myszy dowolny z wyróżnionych plików i wybierz „Kopiuj jako ścieżkę”. Powtórz kroki w SSMS. Ścieżki plików są ujęte w podwójne cudzysłowy, które możesz lub nie chcesz usunąć w SSMS za pomocą funkcji Znajdź / zamień.
Dave Mason
21

Upewnij się, że włączono SQLCMD, klikając opcję Zapytanie> Tryb SQLCMD w studiu zarządzania.

  1. Załóżmy, że masz cztery pliki .sql ( script1.sql,script2.sql,script3.sql,script4.sql) w folderze c:\scripts.

  2. Utwórz główny plik skryptu (Main.sql) z następującymi elementami:

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

    Zapisz plik Main.sql w c: \ scripts.

  3. Utwórz plik wsadowy o ExecuteScripts.batnastępującej nazwie :

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

    Pamiętaj, aby zastąpić <YourDatabaseName>bazę danych, w której chcesz wykonywać skrypty. Na przykład, jeśli bazą danych jest „Pracownik”, polecenie byłoby następujące:

    SQLCMD -E -dEmployee -ic:\Scripts\Main.sql
    PAUSE
  4. Uruchom plik wsadowy, dwukrotnie klikając to samo.

Ashish Gupta
źródło
Właśnie zredagowałem odpowiedź. Należy również upewnić się, że pliki skryptów istnieją w określonej ścieżce.
Ashish Gupta,
dobrą rzeczą w tym podejściu jest to, że zostanie znaleziony jakikolwiek błąd, a następnie przestań wykonywać dalsze skrypty :) podobnie do -bprzykładu:SQLCMD -b -i "file 1.sql","file 2.sql"
Jaider
i wadą tego podejścia jest to, że trzeba utrzymywać listę wszystkich plików SQL do uruchomienia.
Francisco d'Anconia
10

Możesz użyć ApexSQL Propagate . Jest to darmowe narzędzie, które wykonuje wiele skryptów w wielu bazach danych. Możesz wybrać dowolną liczbę skryptów i wykonywać je na jednej lub wielu bazach danych (nawet na wielu serwerach). Możesz utworzyć listę skryptów i zapisać ją, a następnie po prostu wybrać tę listę za każdym razem, gdy chcesz wykonać te same skrypty w utworzonej kolejności (można również dodać wiele list skryptów):

Wybierz skrypty

Po wybraniu skryptów i baz danych zostaną one wyświetlone w oknie głównym i wystarczy kliknąć przycisk „Wykonaj”, a wszystkie skrypty zostaną uruchomione na wybranych bazach w podanej kolejności:

Wykonywanie skryptów

Kevin L.
źródło
8

Zapytanie ogólne

Zapisz poniższe wiersze w notatniku pod nazwą batch.bat i umieść w folderze, w którym znajduje się cały plik skryptu

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

PRZYKŁAD

dla %% G in (* .sql) do sqlcmd / S NFGDDD23432 / d EMPLYEEDB -i "%% G" pauza

czasami, jeśli logowanie się nie powiodło, użyj poniższego kodu z nazwą użytkownika i hasłem

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

dla %% G in (* .sql) do sqlcmd / S NE8148server / d EMPLYEEDB -U Scott -P tiger -i "%% G" pauza

Po utworzeniu pliku bat w folderze, w którym znajdują się pliki skryptów, po prostu kliknij plik bat, a Twoje skrypty zostaną wykonane

Lijo
źródło
5

Napisałem narzędzie open source w języku C #, które umożliwia przeciąganie i upuszczanie wielu plików SQL i uruchamianie ich w bazie danych.

Narzędzie ma następujące funkcje:

  • Pliki skryptów typu „przeciągnij i upuść”
  • Uruchom katalog plików skryptów
  • Sql Script wysyła komunikaty podczas wykonywania
  • Skrypt przeszedł lub nie powiódł się, który jest pokolorowany na zielono i czerwono (żółty do uruchomienia)
  • Opcja zatrzymania w przypadku błędu
  • Otwórz skrypt w przypadku błędu
  • Uruchom raport z czasem potrzebnym dla każdego skryptu
  • Całkowity czas trwania
  • Przetestuj połączenie DB
  • Asynchronus
  • .Net 4 i przetestowane z SQL 2008
  • Pojedynczy plik exe
  • Zabij połączenie w dowolnym momencie
Clinton Ward
źródło
4

Najłatwiejszy sposób, jaki znalazłem, obejmował następujące kroki (jedynym wymaganiem jest, aby być w Win7 +):

  • otwórz folder w Eksploratorze
  • wybierz wszystkie pliki skryptów
  • naciśnij Shift
  • kliknij prawym przyciskiem myszy zaznaczenie i wybierz „Kopiuj jako ścieżkę”
  • przejdź do SQL Server Management Studio
  • utwórz nowe zapytanie
  • Menu zapytań, „tryb SQLCMD”
  • wklej listę, a następnie Ctrl + H, zamień '"C: \' (lub inną literę dysku) na ': r" C:' (tj. poprzedź linie znakiem ': r')
  • uruchom zapytanie

Brzmi długo, ale w rzeczywistości jest bardzo szybki ... (brzmi długo, o ile opisałem nawet najmniejsze kroki)

PepiX
źródło
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
)

Krok 1: powyższe wiersze skopiuj do notatnika i zapisz go jako nietoperz.

step2: w folderze abc dysku d we wszystkich plikach Sql w zapytaniach wykonywanych na serwerze sql.

step3: Podaj swój adres IP, identyfikator użytkownika i hasło.

Nagaraju Chimmani
źródło
To pytanie dotyczy MSSQL, a nie MySQL.
Shawn
0

Możesz stworzyć jeden skrypt, który wywoła wszystkie pozostałe.

Umieść w pliku wsadowym:

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

Po uruchomieniu tego pliku wsadowego utworzy on nowy skrypt o nazwie all.sqlw tym samym katalogu, w którym znajduje się plik wsadowy. Będzie szukać wszystkich plików z rozszerzeniem .sqlw tym samym katalogu, w którym znajduje się plik wsadowy.

Następnie możesz uruchomić wszystkie skrypty za pomocą sqlplus user/pwd @all.sql(lub rozszerzyć plik wsadowy, aby wywołać sqlpluspo utworzeniu all.sqlskryptu)

rahul jain
źródło
0

Aby wykonać każdy plik SQL w tym samym katalogu, użyj następującego polecenia:

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

To polecenie utworzy pojedynczy plik SQL z nazwami każdego pliku SQL w katalogu z dołączonym znakiem „@”.

Po all.sqlutworzeniu po prostu wykonaj all.sqlz SQLPlus, spowoduje to wykonanie każdego pliku sql w all.sql.

user7609040
źródło
0

Jeśli możesz używać interaktywnego SQL:

1 - Utwórz plik .BAT z tym kodem:

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

2 - Zmień pwd i ServerName.

3 - Umieść plik .BAT w folderze zawierającym pliki .SQL i uruchom go.

Alberto Labuto
źródło