Maak een batchbestand met script (sorry voor het formatteren, maar het zou echt inline moeten zijn om batch uit te voeren):
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"
Noem het "run.bat". Gebruik nu de params om batch uit te voeren:
run.bat [gebruikersnaam] [wachtwoord] [servernaam] [database]
op voorbeeld:
run.bat sa pwd111 localhost\SQLEXPRESS master
eerst worden alle opgeslagen procedurenamen opgeslagen in het bestand sp_list.txt, daarna één voor één in aparte scriptbestanden. Het enige probleem - laatste regel van elk script met resultaattelling - ik werk eraan :)
bewerkt :bug in zoekopdracht opgelost
Regel "Betrokken rijen" verwijderen
Ok, nu moeten we nog een batch maken:
type %1 | findstr /V /i %2 > xxxtmpfile
copy xxxtmpfile %1 /y /v
del xxxtmpfile
Noem het "line_del.bat". Kijk, de eerste parameter is bestand om te verwerken, 2e - string om regels te zoeken om te verwijderen. Pas nu de hoofdbatch aan (nogmaals, sorry voor het formatteren):
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"
Zie gerelateerde artikelen:
Eenvoudige programmeeropdrachten in een batchomgeving
osql-hulpprogramma
MSSQL :Hoe maak je een script voor het maken van opgeslagen procedures met code?
Verwijder bepaalde regels in een txt-bestand via een batchbestand
:) je merkt het misschien, de laatste twee zijn van SO!