sql >> Database >  >> RDS >> Sqlserver

hoe opgeslagen SQL-procedures opslaan in .sql-bestanden via batch

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!



  1. Lege parameterlijst IN-clausule in MySQL

  2. sql pdo php waar in variabele

  3. SQL voor het verkrijgen van gegevens van een vorige maand

  4. Wijs eerst de Guid-eigenschap toe aan Oracle in Entity Framework Code