Phương pháp xếp hạng
raiserror('Oh no a fatal error', 20, -1) with log
Thao tác này sẽ ngắt kết nối, do đó ngăn phần còn lại của tập lệnh chạy.
Lưu ý rằng cả mức độ nghiêm trọng 20 trở lên và WITH LOG
tùy chọn là cần thiết để nó hoạt động theo cách này.
Điều này thậm chí hoạt động với các câu lệnh GO, ví dụ:
print 'hi'
go
raiserror('Oh no a fatal error', 20, -1) with log
go
print 'ho'
Sẽ cung cấp cho bạn đầu ra:
hi
Msg 2745, Level 16, State 2, Line 1
Process ID 51 has raised user error 50000, severity 20. SQL Server is terminating this process.
Msg 50000, Level 20, State 1, Line 1
Oh no a fatal error
Msg 0, Level 20, State 0, Line 0
A severe error occurred on the current command. The results, if any, should be discarded.
Lưu ý rằng 'ho' không được in.
CAVEATS:
- Điều này chỉ hoạt động nếu bạn đăng nhập với tư cách quản trị viên (vai trò 'sysadmin') và cũng khiến bạn không có kết nối cơ sở dữ liệu.
- Nếu bạn KHÔNG đăng nhập với tư cách quản trị viên, lệnh gọi RAISEERROR () sẽ không thành công và tập lệnh sẽ tiếp tục thực thi .
- Khi được gọi bằng sqlcmd.exe, mã thoát 2745 sẽ được báo cáo.
Tham khảo:http://www.mydatabasesupport.com/forums/ms-sqlserver/174037-sql-server-2000-abort-whole-script.html#post761334
Phương thức noexec
Một phương pháp khác hoạt động với câu lệnh GO là set noexec on
. Điều này khiến phần còn lại của tập lệnh bị bỏ qua. Nó không ngắt kết nối, nhưng bạn cần bật noexec
tắt một lần nữa trước khi bất kỳ lệnh nào sẽ thực thi.
Ví dụ:
print 'hi'
go
print 'Fatal error, script will not continue!'
set noexec on
print 'ho'
go
-- last line of the script
set noexec off -- Turn execution back on; only needed in SSMS, so as to be able
-- to run this script again in the same session.