Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

come salvare le stored procedure SQL in file .sql tramite batch

Crea file batch con script (scusate per la formattazione, ma dovrebbe essere in linea per eseguire batch):

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"

Chiamalo "run.bat". Ora, per eseguire il batch, usa i parametri:
run.bat [nome utente] [password] [nome server] [database]
su esempio:
run.bat sa pwd111 localhost\SQLEXPRESS master
prima tutti i nomi delle procedure memorizzate verranno archiviati nel file sp_list.txt, quindi uno per uno in file di script separati. L'unico problema - l'ultima riga di ogni script con il conteggio dei risultati - ci sto lavorando :)

modificato :bug nella query risolto

Rimozione della riga "Righe interessate"
Ok, ora dobbiamo creare un altro batch:

type %1 | findstr /V /i %2  > xxxtmpfile 
copy xxxtmpfile %1 /y /v
del xxxtmpfile

Chiamalo "line_del.bat". Vedi, il primo parametro è file da elaborare, 2a - stringa per cercare le righe da rimuovere. Ora modifica il batch principale (di nuovo, scusa per la formattazione):

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"

Consulta gli articoli correlati:
Comandi di programmazione semplici in un ambiente batch
Utilità osql
MSSQL :Come si crea uno script per la creazione di una stored procedure con il codice?
Cancella alcune righe in un file txt tramite un file batch

:) potresti notare, gli ultimi due sono di SO!