Là một phần của chiến lược tích hợp của tôi, tôi có một vài tập lệnh SQL chạy để cập nhật cơ sở dữ liệu. Điều đầu tiên mà tất cả các tập lệnh này thực hiện là kiểm tra xem liệu chúng có cần chạy hay không, ví dụ:Làm cách nào để tạo điều kiện thủ tục được lưu trữ trong SQL Server?
if @version <> @expects
begin
declare @error varchar(100);
set @error = 'Invalid version. Your version is ' + convert(varchar, @version) + '. This script expects version ' + convert(varchar, @expects) + '.';
raiserror(@error, 10, 1);
end
else
begin
...sql statements here...
end
Hoạt động tuyệt vời! Ngoại trừ nếu tôi cần phải thêm một thủ tục được lưu trữ. Lệnh "create proc" phải là lệnh duy nhất trong một loạt lệnh sql. Đặt "proc tạo" trong câu lệnh IF của tôi gây ra lỗi này:
'CREATE/ALTER PROCEDURE' must be the first statement in a query batch.
Ouch! Làm thế nào để đặt lệnh CREATE PROC trong kịch bản của tôi, và nó chỉ thực thi nếu nó cần?
Tạo lại procs mỗi lần (giảm điều kiện) là giải pháp tốt hơn nhiều.Nếu sử dụng exec, bạn không đạt được gì và có những nhược điểm; proc của bạn phải thoát khỏi chuỗi và bất kỳ số dòng nào trong các lỗi sẽ tham chiếu đến số dòng tương ứng với lệnh exec. – Peter
+1 để có thể xử lý các điều kiện khác với sự tồn tại (trong trường hợp của tôi @@ Phiên bản ổ đĩa cho dù procs nào đó được tạo hay không) – cmsjr
+1 - Tôi đã sử dụng cấu hình này để tạo cấu hình trình tạo CRUD của mình tồn tại, và _then_ thay đổi nó. Điều này cho phép tôi sửa đổi procs được lưu trữ của tôi, xây dựng CRUD nhưng _preserve bất kỳ quyền nào được gán cho procs_ hiện có. –