Đây là cách tôi sẽ làm điều đó:
PRINT 'This runs'
go
SELECT 0/0, 'This causes an error'
go
if (@@error <> 0)
Begin
set nocount on
set noexec on
End
GO
PRINT 'This should not run'
go
set noexec off
set nocount off
GO
Chế độ "noexec" đặt SSMS là một trạng thái mà nó chỉ biên dịch T-SQL và không thực sự thực thi nó. Tương tự như việc bạn vô tình nhấn nút trên thanh công cụ Phân tích cú pháp (Ctrl + F5) thay vì Thực thi (F5).
Đừng quên tắt lại noexec ở cuối tập lệnh của bạn. Nếu không, người dùng sẽ bối rối bởi vĩnh viễn "(Các) lệnh đã hoàn thành thành công". tin nhắn.
Tôi sử dụng kiểm tra lỗi @@ trong lô tiếp theo thay vì sử dụng các khối TRY CATCH. Sử dụng lỗi @@ trong đợt tiếp theo sẽ bắt gặp lỗi biên dịch, chẳng hạn như "bảng không tồn tại".
Ngoài chế độ noexec, tôi cũng chuyển đổi chế độ nocount. Khi bật và tắt chế độ nocount, các truy vấn của bạn sẽ vẫn báo cáo thông báo "(0 hàng bị ảnh hưởng)". Thông báo luôn báo cáo không có hàng, bởi vì bạn đang ở chế độ noexec. Tuy nhiên, việc bật nocount sẽ ngăn chặn những thông báo này.
Cũng lưu ý rằng nếu đang chạy SQL Server 2005, lệnh bạn đang bỏ qua có thể vẫn đưa ra thông báo lỗi nếu nó tham chiếu đến một bảng không tồn tại và lệnh nếu là lệnh đầu tiên trong lô. Buộc lệnh là lệnh thứ hai trong lô với câu lệnh Print không có thật có thể ngăn chặn điều này. Xem Lỗi MS # 569263 để biết thêm chi tiết.