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!