Các RAISERROR phương pháp
raiserror('Oh no a fatal error', 20, -1) with log
Điều này sẽ chấm dứ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 hoặc cao hơ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.
CÁCH MẠNG:
- Đ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, bản thân cuộc gọi RAISEERROR () sẽ thất bại và tập lệnh sẽ tiếp tục thực thi .
- Khi được gọi với sqlcmd.exe, mã thoát 2745 sẽ được báo cáo.
Tham khảo: http://www.mydatabaseupport.com/forums/ms-sqlserver/174037-sql-server-2000-abort-whole-script.html#post761334
Phương pháp noexec
Một phương pháp khác hoạt động với các 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 chấm dứt kết nối, nhưng bạn cần noexec
tắt lại trước khi bất kỳ lệnh nào được thực thi.
Thí 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.