Opret batchfil med script (beklager formateringen, men den burde virkelig være inline for at udføre 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"
Navngiv den "run.bat". For at udføre batch skal du nu bruge params:
run.bat [brugernavn] [adgangskode] [servernavn] [database]
på eksempel:
run.bat sa pwd111 localhost\SQLEXPRESS master
først vil alle lagrede procedurenavne blive gemt i filen sp_list.txt, derefter en efter en i separate scriptfiler. Det eneste problem - sidste linje i hvert script med resultattæller - jeg arbejder på det :)
redigeret :fejl i forespørgsel rettet
Fjerner linjen "Berørte rækker"
Ok, nu skal vi oprette en batch mere:
type %1 | findstr /V /i %2 > xxxtmpfile
copy xxxtmpfile %1 /y /v
del xxxtmpfile
Navngiv den "line_del.bat". Se, den første parameter er fil, der skal behandles, 2. - streng for at søge linjer til fjernelse. Rediger nu hovedbatchen (igen, undskyld 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 relaterede artikler:
Simple programmeringskommandoer i et batchmiljø
osql Utility
MSSQL :Hvordan scripter du oprettelse af Stored Procedure med kode?
Slet bestemte linjer i en txt-fil via en batch-fil
:) du bemærker måske, de sidste to er fra SO!