Tôi tin rằng có một vài trường hợp ngoại lệ, nhưng từ Mức độ lỗi động cơ cơ sở dữ liệu (MSDN) :
Thông báo lỗi có mức độ nghiêm trọng từ 19 trở lên sẽ dừng việc thực thi lô hiện tại.
Các lỗi chấm dứt kết nối cơ sở dữ liệu, thường có mức độ nghiêm trọng từ 20 đến 25, không được xử lý bởi khối CATCH vì việc thực thi bị hủy bỏ khi kết nối kết thúc.
Vì vậy, có vẻ như bạn có thể nhận được một danh sách dứt khoát từ truy vấn sau (tất nhiên điều này sẽ không cho phép bạn lọc ra những cái nào có thể do người dùng T-SQL gây ra):
SELECT message_id, severity, [text]
FROM sys.messages
WHERE language_id = 1033
AND severity >= 19
ORDER BY severity, message_id;
Trong SQL Server 2012, điều này tạo ra 210 hàng.
Trong SQL Server 2016, điều này tạo ra 256 hàng.
Nhân tiện, tôi không tin hai kịch bản bạn mô tả trong câu hỏi của bạn hoạt động theo cách bạn nghĩ, ít nhất là không phải trong các phiên bản hiện đại của SQL Server. Tôi đã thử điều này trên cả năm 2012 và 2016 (Tôi tin rằng bài viết của Erland mô tả hành vi SQL Server 2000, tôi không nhớ nó có khác biệt gì không, nhưng ngày nay không liên quan lắm cho dù vậy).
USE tempdb;
GO
CREATE PROCEDURE dbo.pA -- no parameters
AS PRINT 1
GO
CREATE PROCEDURE dbo.pB -- two parameters
@x INT, @y INT
AS PRINT 1
GO
SET XACT_ABORT OFF;
GO
EXEC dbo.pA @foo = 1;
PRINT '### Calling procedure that doesn''t take parameters with a parameter';
GO
EXEC dbo.pB;
PRINT '### Calling procedure that takes 2 parameters with no parameters';
GO
EXEC dbo.pB @x = 1;
PRINT '### Calling procedure that takes 2 parameters with not enough parameters';
GO
EXEC dbo.pB @x = 1, @y = 2, @z = 3;
PRINT '### Calling procedure that takes 2 parameters with too many parameters';
GO
Tất cả đều tạo ra lỗi ở mức độ nghiêm trọng 16 và tất cả đều xảy ra với lô, bằng chứng là đầu ra in:
Msg 8146, Cấp 16, Trạng thái 2, Thủ tục pA, Dòng 11
Quy trình pA không có tham số và đối số được cung cấp.
### Quy trình gọi không lấy tham số với tham số
Msg 201, Cấp 16, Trạng thái 4, Quy trình pB,
Quy trình dòng 14
hoặc chức năng 'pB' mong đợi tham số '@x', không được cung cấp.
### Quy trình gọi có 2 tham số không có tham số
Msg 201, Cấp 16, Trạng thái 4, Quy trình pB,
Quy trình dòng 18
hoặc chức năng 'pB' mong đợi tham số '@y', không được cung cấp.
### Quy trình gọi có 2 tham số không đủ tham số
Msg 8144, Cấp 16, Trạng thái 2, Quy trình pB,
Quy trình 22
hoặc chức năng pB có quá nhiều đối số được chỉ định.
### Thủ tục gọi có 2 tham số với quá nhiều tham số
Như tôi nghi ngờ, tất nhiên, có những trường hợp ngoại lệ, như đã lưu ý trong các bình luận. Lỗi chuyển đổi là nghiêm trọng 16 nhưng hủy bỏ lô:
SET XACT_ABORT OFF;
SELECT CONVERT (INT, 'foo');
PRINT 'Made it.'; -- no print happens
Kết quả không bao gồm đầu ra in lần này:
Msg 245, Cấp 16,
Chuyển đổi trạng thái 1 không thành công khi chuyển đổi giá trị varchar 'foo' thành kiểu dữ liệu int.