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!