2010-04-06 17 views
89

Ho un numero di file .sql che devo eseguire per applicare le modifiche apportate da altri sviluppatori su un database SQL Server 2005. I file sono denominati secondo il seguente schema:Esegui tutti i file SQL in una directory

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

C'è un modo per eseguire tutti in una volta sola?

risposta

99

generare una lima con il seguente comando:

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

Luogo questo file bat nella directory da cui si desidera che i file sql da eseguire, doppio fare clic sul file .BAT e il gioco è fatto!

+2

quando eseguo il file batch si verifica un problema di autenticazione che dice "Accesso non riuscito. Il login proviene da un dominio non attendibile e non può essere utilizzato con l'autenticazione di Windows.". C'è un modo per fornire nome utente e password anche come nome del server e database? –

+4

@SanjayMaharjan usa -U per utente e -P per password, come: 'per %% G in (* .sql) do sqlcmd/S nomeserver/d databaseName -U username -P" password "-i" %% G " ' – Rickedb

+0

come posso mettere l'output in file separati usando -o? ogni volta che uso come -o temp.txt, questo temp.txt viene sovrascritto. Voglio ottenere i file di output come lo stesso nome di file sql. – kevin

17

Assicurarsi di aver sqlcmd attivato cliccando sul Query > opzione Modalità SQLCMD in studio gestione.

  1. Supponiamo di avere quattro file sql (script1.sql,script2.sql,script3.sql,script4.sql) in una cartella c:\scripts.

  2. creare un file script principale (Main.sql) con il seguente:

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

    Salvare il Main.sql in c: \ scripts stesso.

  3. Creare un file batch denominato ExecuteScripts.bat con il seguente:

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

    Ricordati di sostituire <YourDatabaseName> con il database che si desidera eseguire i propri script. Ad esempio, se il database è "Dipendente", il comando sarà il seguente:

    SQLCMD -E -dEmployee -ic:\Scripts\Main.sql 
    PAUSE 
    
  4. eseguire il file batch con un doppio clic la stessa.

+1

'sintassi non corretta vicino a ':'. 'per': r foo.sql' – abatishchev

+0

I edi ho risposto alla mia risposta Inoltre, è necessario assicurarsi che i file di script esistano nel percorso specificato. –

+0

la cosa buona di questo approccio è che si trova qualsiasi errore, quindi si interrompe l'esecuzione di ulteriori script :) simile all'esempio '-b':' SQLCMD -b -i "file 1.sql", "file 2.sql" ' – Jaider

64

Utilizzare FOR. Dal prompt dei comandi:

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

Ho dovuto aggiungere virgolette sull'ultimo "% f" per farlo funzionare con script che contengono spazi –

+0

Per una versione che funziona in file batch, vedere [questa risposta] (http://stackoverflow.com/a/6504317/ 70345). –

+0

Ho anche dovuto aggiungere altri parametri (ad es./I per abilitare gli identificatori citati) –

5

Ho scritto an open source utility in C# che consente di trascinare e rilasciare molti file SQL e iniziare a eseguirli su un database.

L'utilità ha le seguenti caratteristiche:

  • trascinare i file di script
  • Esegui una directory di script di file
  • script SQL out put messaggi durante l'esecuzione
  • Script superato o meno che siano colorato verde e rosso (giallo per la corsa)
  • Opzione stop per errore
  • Apri script sull'opzione di errore
  • rapporto Run con tempo impiegato per ogni script
  • Tempo totale durata della connessione
  • test DB
  • asincrono
  • .Net 4 & collaudato con SQL 2008
  • singolo file EXE
  • connessione
  • uccidere a in qualsiasi momento
0

È possibile creare un singolo script che chiama al gli altri.

Mettere quanto segue in un file batch:

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

Quando si esegue file batch che si creerà un nuovo script chiamato all.sql nella stessa directory in cui si trova il file batch. Cerca tutti i file con l'estensione .sql nella stessa directory in cui si trova il file batch.

È quindi possibile eseguire tutti gli script utilizzando sqlplus user/pwd @all.sql (o estendere il file batch per chiamare sqlplus dopo aver creato lo script all.sql)

15
  1. In SQL Management Studio apre una nuova query e digitare tutti i file come di seguito

    :r c:\Scripts\script1.sql 
    :r c:\Scripts\script2.sql 
    :r c:\Scripts\script3.sql 
    
  2. rivolgersi per ottenere informazioni sul menu di SQL Management Studio e assicurarsi che la modalità SQLCMD è abilitato
  3. Cliccare su Modalità SQLCMD; i file saranno selezionati in grigio, come di seguito

    :r c:\Scripts\script1.sql 
    :r c:\Scripts\script2.sql 
    :r c:\Scripts\script3.sql 
    
  4. Ora eseguire
+0

questo è davvero noioso se ho centinaia di file. –

6

generale Query

salvare le linee di seguito in blocco note con il nome batch.bat e posto all'interno della cartella in cui tutta la vostra file di script ci sono

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

EXA MPLE

per %% G in (*.sql) fare sqlcmd/S NFGDDD23432/d EMPLYEEDB -i "%% G" pausa

qualche volta se Accesso non riuscito per voi Si prega di utilizzare il codice qui sotto con nome utente ela password

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

per %% G (* .sql) fare sqlcmd/S NE8148server/d EMPLYEEDB -U Scott -P tigre -i "%% G" pausa

Dopo aver creato il file bat all'interno della cartella in cui i file di script sono lì solo cliccare sul pipistrello di file i vostri script andranno eseguiti

0

per l'esecuzione di ogni SQLFile sulla stessa directory utilizzare il seguente comando:

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

Questo comando creerà un unico file SQL con i nomi di tutti i file SQL nella directory aggiunto da "@".

Dopo che lo all.sql è stato creato è sufficiente eseguire all.sql con SQLPlus, questo eseguirà ogni file sql nello all.sql.

8

È possibile utilizzare ApexSQL Propagate. È uno strumento gratuito che esegue più script su più database. È possibile selezionare tutti gli script necessari e eseguirli su uno o più database (anche su più server). È possibile creare l'elenco degli script e salvarlo, quindi basta selezionare quella lista ogni volta che si desidera eseguire quegli stessi script nell'ordine creato (più elenchi di script possono essere aggiunti anche):

Select scripts

Quando gli script e database sono selezionati, che verranno visualizzati nella finestra principale e tutto quello che dovete fare è cliccare sul pulsante “Esegui” e tutti gli script verranno eseguiti sul database selezionati nell'ordine indicato:

Scripts execution

Problemi correlati