Skip to main content

Usando TRY ... CATCH para lidar com erros do SQL Server

Errores en la instalación del s10 - WINDOWS 10 - 8 - SOLUCION!!! (Pode 2025)

Errores en la instalación del s10 - WINDOWS 10 - 8 - SOLUCION!!! (Pode 2025)
Anonim

A instrução TRY… CATCH no Transact-SQL detecta e manipula condições de erro em aplicativos de banco de dados. Essa declaração é a base do tratamento de erros do SQL Server e é uma parte importante do desenvolvimento de aplicativos de banco de dados robustos. TENTE … O CATCH se aplica ao SQL Server a partir de 2008, o Banco de Dados SQL do Azure, o SQL Data Warehouse do Azure e o Parallel Data Warehouse.

Apresentando o TRY … CATCH

TRY … CATCH funciona permitindo que você especifique duas instruções Transact-SQL: uma que você deseja "tentar" e outra para "capturar" quaisquer erros que possam surgir. Quando o SQL Server encontra uma instrução TRY … CATCH, ele imediatamente executa a instrução incluída na cláusula TRY. Se a instrução TRY for executada com êxito, o SQL Server será ativado. No entanto, se a instrução TRY gera um erro, o SQL Server executa a instrução CATCH para manipular o erro normalmente.

A sintaxe básica assume este formato:

COMECE A TENTAR bloco de declaração FIM TENTATIVACOMEÇAR A CAPTURAsql_statementFIM DE CAPTURA ;

Experimente … exemplo de captura

É fácil entender o uso dessa declaração através de um exemplo. Imagine que você é o administrador de um banco de dados de recursos humanos que contém uma tabela denominada "Funcionários", que contém informações sobre cada um dos funcionários em sua organização. Essa tabela usa um número de ID do funcionário inteiro como a chave primária. Você pode tentar usar a declaração abaixo para inserir um novo funcionário em seu banco de dados:

INSERT INTO funcionários (id, first_name, last_name, extension)VALORES (12497, 'Mike', 'Chapple', 4201)

Em circunstâncias normais, essa declaração adicionaria uma linha à tabela Funcionários. No entanto, se um funcionário com ID 12497 já existir no banco de dados, a inserção da linha violaria a restrição de chave primária e resultaria no seguinte erro:

Msg 2627, nível 14, estado 1, linha 1Violação da restrição PRIMARY KEY 'PK_employee_id'. Não é possível inserir chave duplicada no objeto 'dbo.employees'.A instrução foi encerrada.

Embora esse erro forneça as informações necessárias para solucionar o problema, há dois problemas com ele. Primeiro, a mensagem é enigmática. Inclui códigos de erro, números de linha e outras informações que são incompreensíveis para o usuário médio. Em segundo lugar, e mais importante, faz com que a instrução seja interrompida e pode causar uma falha no aplicativo.A alternativa é envolver a instrução em uma instrução TRY… CATCH, conforme mostrado aqui:

COMECE A TENTARINSERT INTO funcionários (id, first_name, last_name, extension)VALORES (12497, 'Mike', 'Chapple', 4201)FIM TENTATIVACOMEÇAR A CAPTURAPRINT 'ERROR:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Correio do empregado',@recipientes = '[email protected]',@body = 'Ocorreu um erro ao criar um novo registro de funcionário.',@subject = 'Erro de duplicação de ID do funcionário';FIM DE CAPTURA

Neste exemplo, quaisquer erros que ocorram são relatados tanto para o usuário que está executando o comando quanto para o endereço de e-mail [email protected]. O erro mostrado ao usuário é:

Erro: violação da restrição PRIMARY KEY 'PK_employee_id'. Não é possível inserir chave duplicada no objeto 'dbo.employees'.Correio enfileirado.

A execução do aplicativo continua normalmente, permitindo que o programador manipule o erro. O uso da instrução TRY … CATCH é uma maneira elegante de detectar e tratar proativamente os erros que ocorrem nos aplicativos de banco de dados do SQL Server.

Aprendendo mais

Se você quiser aprender mais sobre a Linguagem de Consulta Estruturada, confira Introdução ao SQL.