sql >> Databáze >  >> RDS >> Sqlserver

jak uložit uložené procedury SQL do souborů .sql pomocí dávky

Vytvořte dávkový soubor se skriptem (omlouvám se za formátování, ale pro spuštění dávky by měl být skutečně vložen):

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"

Pojmenujte jej „run.bat“. Nyní pro spuštění dávky použijte parametry:
run.bat [uživatelské jméno] [heslo] [název serveru] [databáze]
v příkladu:
run.bat sa pwd111 localhost\SQLEXPRESS master
nejprve budou všechny názvy uložených procedur uloženy v souboru sp_list.txt, poté jeden po druhém v samostatných souborech skriptů. Jediný problém - poslední řádek každého skriptu s počtem výsledků - na tom pracuji :)

upraveno :Opravena chyba v dotazu

Odebírání řádku „Dotčené řádky“
Dobře, teď musíme vytvořit ještě jednu dávku:

type %1 | findstr /V /i %2  > xxxtmpfile 
copy xxxtmpfile %1 /y /v
del xxxtmpfile

Pojmenujte jej "line_del.bat". Podívejte, první parametr je soubor ke zpracování, 2. - řetězec pro vyhledávání řádků pro odstranění. Nyní upravte hlavní dávku (opět se omlouvám za formátování):

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"

Viz související články:
Jednoduché programovací příkazy v dávkovém prostředí
Osql Utility
MSSQL :Jak skriptujete vytvoření uložené procedury pomocí kódu?
Odstranit určité řádky v souboru txt pomocí dávkového souboru

:) můžete si všimnout, poslední dva jsou od SO!



  1. výchozí časové pásmo postgres

  2. Migrují všichni do cloudu?

  3. Třídění dotazů MySQL podle zeměpisné šířky/délky

  4. 2 způsoby, jak odstranit duplicitní řádky v MariaDB (ignoruje primární klíč)