몇 가지 예외가 있다고 생각하지만 MSDN (Database Engine Error Severities)의 경우는 다음과 같습니다.
심각도가 19 이상인 오류 메시지는 현재 배치 실행을 중지합니다.
연결이 종료되면 실행이 중단되므로 일반적으로 심각도가 20에서 25 사이 인 데이터베이스 연결을 종료하는 오류는 CATCH 블록에서 처리되지 않습니다.
따라서 다음 쿼리에서 결정적인 목록을 얻을 수있는 것 같습니다 (물론 사용자 T-SQL로 인해 발생할 수있는 목록을 필터링 할 수는 없습니다).
SELECT message_id, severity, [text]
FROM sys.messages
WHERE language_id = 1033
AND severity >= 19
ORDER BY severity, message_id;
SQL Server 2012에서는 210 개의 행이 생성됩니다.
SQL Server 2016에서는 256 개의 행이 생성됩니다.
그런데 질문에 설명하는 두 가지 시나리오가 적어도 최신 버전의 SQL Server에서는 생각하지 않은 방식으로 작동한다고 생각하지 않습니다. 나는 2012 년과 2016 년에 이것을 시도했다 (Erland의 기사는 SQL Server 2000 동작에 대해 설명한다고 생각합니다.
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
이들은 모두 심각도 레벨 16의 오류를 생성하며 인쇄 출력에 의해 증명 된대로 일괄 처리로 진행됩니다.
메시지 8146, 수준 16, 상태 2, 절차 pA, 11 행
절차 pA에는 매개 변수가없고 인수가 제공되었습니다.
### 매개 변수
Msg 201, Level 16, State 4, Procedure pB, Line 14
프로 시저 또는 함수 'pB'를 사용하여 매개 변수를 사용하지 않는 호출 프로 시저에는 제공되지 않은
매개 변수 '@x'가 필요합니다.
### 매개 변수없이 2 개의 매개 변수를 사용하는 호출 프로 시저
메시지 201, 수준 16, 상태 4, 프로 시저 pB, 줄 18
프로 시저 또는 함수 'pB'에는 제공되지 않은 매개 변수 '@y'가 필요합니다.
### 매개 변수가 충분하지 않은 2 개의 매개 변수를 사용하는 호출 프로 시저
메시지 8144, 수준 16, 상태 2, 프로 시저 pB, 22 행
프로 시저 또는 함수 pB에 너무 많은 인수가 지정되었습니다.
### 매개 변수가 너무 많은 2 개의 매개 변수를 사용하는 호출 프로 시저
내가 의심했듯이, 코멘트에 언급 된 바와 같이 물론 예외가 있습니다. 변환 실패는 심각도 16이지만 배치를 중단합니다.
SET XACT_ABORT OFF;
SELECT CONVERT (INT, 'foo');
PRINT 'Made it.'; -- no print happens
이번에는 인쇄 결과가 포함되지 않습니다.
메시지 245, 수준 16, 상태 1
varchar 값 'foo'를 데이터 형식 int로 변환 할 때 변환에 실패했습니다.