Creare file batch con lo script (dispiace per la formattazione, ma è in realtà dovrebbe essere in linea per l'esecuzione 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"
nome è "run.bat". Ora, per l'esecuzione di batch di uso params:
run.bat [nome utente] [password] [nomeserver] [Database]
su esempio:
run.bat sa pwd111 localhost \ maestro SQLEXPRESS
nomi primo all stored procedure verrà memorizzato nel file sp_list.txt, quindi uno alla volta in file di script separati. L'unico problema - ultima riga di ogni script con conteggio risultato - sto Workin' su di esso :)
modificati: bug nella query risolto
Rimozione "righe interessate" linea
Ok, ora abbiamo bisogno di creare un altro lotto:
type %1 | findstr /V /i %2 > xxxtmpfile
copy xxxtmpfile %1 /y /v
del xxxtmpfile
Nome "line_del.bat". Vedi, il primo parametro è il file da elaborare, la seconda stringa per cercare le linee da rimuovere.Ora modificare il lotto principale (di nuovo, mi dispiace 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"
Vedi articoli correlati:
Simple programming commands in a batch environment
osql Utility
MSSQL: How do you script Stored Procedure creation with code?
Delete certain lines in a txt file via a batch file
:) si può notare, ultimi due sono da COSÌ!
fonte
2009-02-20 16:04:23
Grazie mille! Ho provato un po 'in giro, ma ho qualche problema con l'autenticazione (osql can connect). Darei un altro tentativo nei prossimi giorni ... cordiali saluti – seansilver
Non si romperebbe per procs di grandi dimensioni? Quando eseguo: SELEZIONA ROUTINE_NAME, max (len (ROUTINE_DEFINITION)) FROM INFORMATION_SCHEMA.Routines raggruppa per ROUTINE_NAME ordina per 2 desc; Ho un sacco di procs che sono 4000 caratteri. Abbastanza sicuro di aver bisogno di uscire da sys.comments per ottenere i dati giusti. – jcollum
Oops, che dovrebbe essere syscomments nel commento sopra. – jcollum