Skapa batchfil med skript (förlåt om formateringen, men den borde verkligen vara inline för att köra 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"
Döp den till "run.bat". Nu, för att köra batch använd params:
run.bat [användarnamn] [lösenord] [servernamn] [databas]
exempel:
run.bat sa pwd111 localhost\SQLEXPRESS master
först kommer alla lagrade procedurnamn att lagras i filen sp_list.txt, sedan en efter en i separata skriptfiler. Det enda problemet - sista raden i varje skript med resultaträkning - jag jobbar på det :)
redigerad :bugg i fråga fixad
Ta bort raderna "berörda rader"
Ok, nu måste vi skapa ytterligare en batch:
type %1 | findstr /V /i %2 > xxxtmpfile
copy xxxtmpfile %1 /y /v
del xxxtmpfile
Döp den till "line_del.bat". Se, den första parametern är fil att bearbeta, 2:a - sträng för att söka rader för borttagning. Ändra nu huvudbatchen (igen, förlåt om formateringen):
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"
Se relaterade artiklar:
Enkla programmeringskommandon i en batchmiljö
osql Utility
MSSQL :Hur skriptar du skapande av lagrad procedur med kod?
Ta bort vissa rader i en txt-fil via en batchfil
:) du kanske märker, de två sista är från SO!