Acredito que existem algumas exceções, mas a partir do MSDN (Mecanismo de Banco de Dados) :
As mensagens de erro com nível de gravidade 19 ou superior interrompem a execução do lote atual.
Erros que encerram a conexão com o banco de dados, geralmente com severidade de 20 a 25, não são tratados pelo bloco CATCH porque a execução é interrompida quando a conexão termina.
Portanto, parece que você pode obter uma lista definitiva da seguinte consulta (é claro que isso não permitirá que você filtre quais podem ser causadas pelo usuário T-SQL):
SELECT message_id, severity, [text]
FROM sys.messages
WHERE language_id = 1033
AND severity >= 19
ORDER BY severity, message_id;
No SQL Server 2012, isso produz 210 linhas.
No SQL Server 2016, isso produz 256 linhas.
A propósito, não acredito que os dois cenários que você descreve em sua pergunta funcionem da maneira que você pensa, pelo menos não nas versões modernas do SQL Server. Tentei isso em 2012 e 2016 (acredito que o artigo de Erland descreve o comportamento do SQL Server 2000, que não me lembro se era diferente, mas não muito relevante hoje, mesmo que seja).
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
Todos eles produzem erros de nível de gravidade 16 e todos prosseguem com o lote, conforme evidenciado pela saída de impressão:
Msg 8146, Nível 16, Estado 2, Procedimento pA, Linha 11 O
Procedimento pA não possui parâmetros e argumentos foram fornecidos.
### Procedimento de chamada que não aceita parâmetros com um parâmetro
Msg 201, Nível 16, Estado 4, Procedimento pB, Linha 14 O
procedimento ou função 'pB' espera o parâmetro '@x', que não foi fornecido.
### Procedimento de chamada que usa 2 parâmetros sem parâmetros
Msg 201, Nível 16, Estado 4, Procedimento pB, Linha 18 O
procedimento ou função 'pB' espera o parâmetro '@y', que não foi fornecido.
### Chamando o procedimento que usa 2 parâmetros com parâmetros insuficientes
Msg 8144, Nível 16, Estado 2, Procedimento pB, Linha 22
Procedimento ou função pB possui muitos argumentos especificados.
### Procedimento de chamada que usa 2 parâmetros com muitos parâmetros
Como eu suspeitava, existem exceções, é claro, como observado nos comentários. A falha de conversão é a gravidade 16, mas interrompe o lote:
SET XACT_ABORT OFF;
SELECT CONVERT (INT, 'foo');
PRINT 'Made it.'; -- no print happens
Os resultados não incluem a saída de impressão desta vez:
Msg 245, Nível 16, Estado 1
Falha na conversão ao converter o valor varchar 'foo' para o tipo de dados int.
Além dos tipos de erros observados pelo @Aaron ( por exemplo, Gravidade> = 19 e falhas de conversão), os seguintes tipos de erros, observados na página do MSDN para TRY ... CATCH , também abortam um lote:
Nos exemplos abaixo, observe que três deles são do mesmo nível de gravidade 15.
EXEMPLO 1
Devoluções:
EXEMPLO 2
Devoluções:
EXEMPLO 3
Devoluções:
EXEMPLO 4
Devoluções:
fonte