Tạo tập tin thực thi với kịch bản (xin lỗi về định dạng, nhưng nó thực sự cần được inline để thực hiện 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ên nó là "run.bat". Bây giờ, để thực hiện params sử dụng hàng loạt:
run.bat [username] [mật khẩu] [servername] [cơ sở dữ liệu]
trên ví dụ:
run.bat sa pwd111 localhost \ SQLEXPRESS chủ
tên thủ tục đầu tiên tất cả được lưu trữ sẽ được lưu trữ trong tệp sp_list.txt, sau đó từng cái một trong các tệp tập lệnh riêng biệt. Các chỉ vấn đề - dòng cuối cùng của mỗi kịch bản với số lượng kết quả - Tôi đang workin' vào nó :)
sửa: lỗi trong truy vấn cố định
Loại bỏ 'Hàng bị ảnh hưởng' dòng
Ok, bây giờ chúng tôi cần tạo thêm một lô:
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ý, chuỗi thứ hai để tìm kiếm các dòng để xóa.Bây giờ thay đổi hàng loạt 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 bài viết liên quan:
Simple programming commands in a batch environment
osql Utility
MSSQL: How do you script Stored Procedure creation with code?
Delete certain lines in a txt file via a batch file
:) bạn có thể nhận thấy, hai cuối cùng là từ VÌ THẾ!
Nguồn
2009-02-20 16:04:23
Cảm ơn rất nhiều! Tôi đã thử một khoảng một chút, nhưng có một số vấn đề với xác thực (osql cant kết nối). Tôi sẽ cung cấp cho nó một thử những ngày tiếp theo ... tốt nhất liên quan – seansilver
Nó sẽ không phá vỡ cho procs lớn? Khi tôi chạy: SELECT ROUTINE_NAME, max (len (ROUTINE_DEFINITION)) FROM INFORMATION_SCHEMA.Routines nhóm của ROUTINE_NAME đặt hàng bởi 2 desc; Tôi nhận được rất nhiều procs có 4000 ký tự. Khá chắc chắn bạn cần phải thoát khỏi sys.comments để có được dữ liệu đúng. – jcollum
Rất tiếc, điều đó phải là sự syscomments trong nhận xét ở trên. – jcollum