Transações e tratamento de erros no SQL Server
Miriam Antona
Software Engineer
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).
BEGIN TRY
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
SELECT 'Produto inserido corretamente!' AS message;
END TRY
BEGIN CATCH
SELECT 'Ocorreu um erro! Você está no bloco CATCH' AS message;
END CATCH
| message |
|-----------------------------------------------|
| Ocorreu um erro! Você está no bloco CATCH |
ERROR_NUMBER() retorna o número do erro.
ERROR_SEVERITY() retorna a gravidade do erro (11–19).
ERROR_STATE() retorna o estado do erro.
ERROR_LINE() retorna o número da linha do erro.
ERROR_PROCEDURE() retorna o nome da stored procedure/trigger. NULL se não houver stored procedure/trigger.
ERROR_MESSAGE() retorna o texto da mensagem de erro.
BEGIN TRY
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() AS Error_number,
ERROR_SEVERITY() AS Error_severity,
ERROR_STATE() AS Error_state,
ERROR_PROCEDURE() AS Error_procedure,
ERROR_LINE() AS Error_line,
ERROR_MESSAGE() AS Error_message;
END CATCH
| Error_number| Error_severity| Error_state| Error_procedure| Error_line| Error_message |
|-------------|---------------|------------|----------------|-----------|-----------------------------------------------------|
| 2627 | 14 | 1 | NULL | 2 | Violação da restrição UNIQUE KEY 'unique_name'... |
Última saída
| Error_number| Error_severity| Error_state| Error_procedure| Error_line| Error_message |
|-------------|---------------|------------|----------------|-----------|-----------------------------------------------------|
| 2627 | 14 | 1 | NULL | 2 | Violação da restrição UNIQUE KEY 'unique_name'... |
Informações originais do erro
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 da
chave duplicada é (Trek Powerfly 5 - 2018).
SELECT ERROR_NUMBER() AS Error_number,
ERROR_SEVERITY() AS Error_severity,
ERROR_STATE() AS Error_state,
ERROR_PROCEDURE() AS Error_procedure,
ERROR_LINE() AS Error_line,
ERROR_MESSAGE() AS Error_message;
| Error_number | Error_severity | Error_state | Error_procedure | Error_line | Error_message |
|--------------|----------------|-------------|-----------------|------------|---------------|
| NULL | NULL | NULL | NULL | NULL | NULL |
BEGIN TRY
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
END TRY
BEGIN CATCH
BEGIN TRY
INSERT INTO myErrors
VALUES ('ERROR!')
END TRY
BEGIN CATCH
SELECT 'Bloco CATCH externo' AS 'Error_from',
ERROR_NUMBER() AS Error_number,
ERROR_MESSAGE() AS Error_message;
END CATCH
END CATCH
| Error_from | Error_number | Error_message |
|-------------------|--------------|-------------------------------------------------|
| Bloco CATCH externo | 8152 | String or binary data would be truncated. |
Transações e tratamento de erros no SQL Server