sql >> Databasteknik >  >> RDS >> Sqlserver

hur sparar SQL-lagrade procedurer till .sql-filer via batch

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!



  1. Hur fixar man Ora-01427 enkelrads underfråga returnerar mer än en rad i urval?

  2. Lista antalet dubbletter av värden

  3. npgsql datatyp okänd vid användning av group by

  4. ANVÄNDA klausul i oracle 11g