Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

cách lưu các thủ tục được lưu trữ trong SQL vào các tệp .sql qua lô

Tạo tệp hàng loạt bằng tập lệnh (xin lỗi về định dạng, nhưng nó thực sự phải được nội tuyến để thực thi hàng loạt):

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"

Đặt tên là "run.bat". Bây giờ, để thực thi hàng loạt, hãy sử dụng tham số:
run.bat [tên người dùng] [mật khẩu] [tên máy chủ] [cơ sở dữ liệu]
trên ví dụ:
run.bat sa pwd111 localhost \ SQLEXPRESS master
đầu tiên tất cả các tên thủ tục được lưu trữ sẽ được lưu trữ trong tệp sp_list.txt, sau đó từng tên một trong các tệp kịch bản riêng biệt. Vấn đề duy nhất - dòng cuối cùng của mỗi tập lệnh có số kết quả - tôi đang làm việc với nó :)

đã chỉnh sửa :đã sửa lỗi trong truy vấn

Xóa dòng "Hàng bị ảnh hưởng"
Được rồi, bây giờ chúng ta cần tạo thêm một lô nữa:

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

Đặt tên là "line_del.bat". Hãy xem, tham số đầu tiên là tệp để xử lý, tham số thứ hai để tìm kiếm các dòng để loại bỏ. Bây giờ hãy sửa đổi lô chính (một lần nữa, xin lỗi về định dạng):

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"

Xem các bài viết liên quan:
Các lệnh lập trình đơn giản trong môi trường hàng loạt
Tiện ích osql
MSSQL :Làm thế nào để bạn viết kịch bản cho việc tạo Thủ tục đã Lưu trữ bằng mã?
Xóa các dòng nhất định trong tệp txt thông qua tệp hàng loạt

:) bạn có thể nhận thấy, hai cuối cùng là từ 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. Làm thế nào để chèn nhiều bản ghi và nhận giá trị nhận dạng?

  2. Cách gỡ lỗi SQL Server T-SQL trong Visual Studio 2012

  3. SQL SERVER 2008 TRIGGER TRÊN TẠO BẢNG

  4. Trạng thái HTTP 500 - Môi trường thời gian chạy Java (JRE) phiên bản 1.7 không được trình điều khiển này hỗ trợ

  5. Chuyển đổi '01 -Sep-2017 'thành '01 / 09/2017' trong T-SQL?