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

SQL Server:Làm thế nào để hủy bỏ một loạt các lô trong Trình phân tích truy vấn?

Đâ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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách hàm CHARINDEX () hoạt động trong SQL Server (T-SQL)

  2. Câu hỏi về thủ tục được lưu trữ đơn giản

  3. SQL Server, XLOCK gây hiểu lầm &tối ưu hóa

  4. Nhóm các hàng liên tiếp có cùng giá trị sử dụng khoảng thời gian

  5. khóa trên bảng tạm thời trong SQL Server 2008