Anatomia dos erros e erros não capturáveis

Transações e tratamento de erros no SQL Server

Miriam Antona

Software Engineer

Anatomia do erro

INSERT INTO products (product_name, stock, price)
    VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
Msg 2627, Level 14, State 1, Line 1
Violação da restrição UNIQUE KEY 'unique_name'. 
Não é possível inserir chave duplicada no objeto 'dbo.products'. 
O valor duplicado é (Trek Powerfly 5 - 2018).
Transações e tratamento de erros no SQL Server

Anatomia do erro

Número do erro

Uma mensagem de erro com o texto "Msg 2627" em destaque, correspondente ao número do erro.

  • Erros do SQL: 1 a 49999
  • Erros próprios: a partir de 50001
    select * from sys.messages
| message_id | language_id | severity | ... | text                                                            |
|------------|-------------|----------|-----|-----------------------------------------------------------------|
| ...        | ...         | ...      | ... | ...                                                             |
| 2627       | 1033        | 14       | ... | Violation of %ls constraint '%.*ls'. Cannot insert duplicate... |
| ...        | ...         | ...      | ... | ...                                                             |
Transações e tratamento de erros no SQL Server

Anatomia do erro

Nível de severidade

Uma mensagem de erro com o texto "Level 14" em destaque, correspondente ao nível de severidade do erro.

  • 0-10: mensagens informativas
  • 11-16: erros corrigidos pelo usuário (violação de restrição etc.)
  • 17-24: outros erros (problemas de software, fatais)
Transações e tratamento de erros no SQL Server

Anatomia do erro

Estado

Uma mensagem de erro com o texto "State 1" em destaque, correspondente ao estado do erro.

  • 1: quando o SQL Server exibe erro
  • 0-255: erros próprios
Transações e tratamento de erros no SQL Server

Anatomia do erro

Linha

Uma mensagem de erro com o texto "Line 1" em destaque, correspondente à linha onde o erro ocorreu.

Procedure

Uma mensagem de erro com o texto "Procedure Insert_product" em destaque, correspondente ao nome da stored procedure onde o erro ocorreu.

Transações e tratamento de erros no SQL Server

Erros não capturáveis

  • Severidade menor que 11 (11-19 são capturáveis)

  • Severidade de 20 ou mais que encerram a conexão

  • Erros de compilação: objetos e colunas inexistentes

Transações e tratamento de erros no SQL Server

Erros não capturáveis - Exemplo de compilação

BEGIN TRY
    SELECT non_existent_column FROM products;
END TRY
BEGIN CATCH
    SELECT 'You are in the CATCH block' AS message;
END CATCH
Msg 207, Level 16, State 1, Line 2
Invalid column name 'non_existent_column'.
Transações e tratamento de erros no SQL Server

Vamos praticar!

Transações e tratamento de erros no SQL Server

Preparing Video For Download...