sql >> Database teknologi >  >> RDS >> Sqlserver

hvordan gemmer SQL-lagrede procedurer til .sql-filer via batch

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!



  1. Sådan får du SQL-tekst fra Postgres hændelsesudløser

  2. MYSQL - Hvad gør STRAIGHT_JOIN i denne kode?

  3. Sådan sletter du en mysql-post med jquery

  4. PhP (Codegniter) Sammenlægning af forespørgselsresultater før hver sløjfe