Buat file batch dengan skrip (maaf tentang pemformatan, tetapi itu benar-benar harus sebaris untuk mengeksekusi 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"
Beri nama "run.bat". Sekarang, untuk mengeksekusi batch gunakan params:
run.bat [username] [password] [servername] [database]
pada contoh:
run.bat sa pwd111 localhost\SQLEXPRESS master
pertama semua nama prosedur tersimpan akan disimpan dalam file sp_list.txt, kemudian satu per satu dalam file skrip terpisah. Satu-satunya masalah - baris terakhir dari setiap skrip dengan jumlah hasil - saya sedang mengerjakannya :)
diedit :bug dalam kueri diperbaiki
Menghapus baris "Baris yang terpengaruh"
Oke, sekarang kita perlu membuat satu batch lagi:
type %1 | findstr /V /i %2 > xxxtmpfile
copy xxxtmpfile %1 /y /v
del xxxtmpfile
Beri nama "line_del.bat". Lihat, param pertama adalah file untuk diproses, 2nd - string untuk mencari baris untuk dihapus. Sekarang ubah kumpulan utama (sekali lagi, maaf tentang pemformatan):
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"
Lihat artikel terkait:
Perintah pemrograman sederhana dalam lingkungan batch
Utilitas osql
MSSQL :Bagaimana Anda membuat skrip pembuatan Stored Procedure dengan kode?
Hapus baris tertentu dalam file txt melalui file batch
:) Anda mungkin memperhatikan, dua yang terakhir berasal dari SO!