Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server - dừng hoặc ngắt việc thực thi tập lệnh SQL

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiểm tra xem bảng có tồn tại trong SQL Server không

  2. Các giá trị được phân tách bằng dấu phẩy bằng Truy vấn SQL

  3. Mệnh đề WHERE thực thi tốt hơn trước IN và JOIN hoặc sau đó

  4. Cách vô hiệu hóa tất cả các ràng buộc về CHECK &khóa ngoại cho một bảng trong SQL Server (Ví dụ T-SQL)

  5. Làm cách nào để bạn cắt ngắn tất cả các bảng trong cơ sở dữ liệu bằng TSQL?