Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

bagaimana menyimpan prosedur tersimpan SQL ke file .sql melalui batch

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!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laporan Lokal vs Laporan Server di ASP .Net Report viewer control

  2. Jumlah hari yang tersisa di bulan ini

  3. Koma dalam Data CSV

  4. SQL:Transpose Nyata

  5. SQL:HAPUS data dari tabel referensi diri dalam urutan tertentu