Porém antes de utilizar esta funcionalidade em nosso dia a dia, alguns pontos devem ser considerados. O TRY..CATCH só intercepta os seguintes tipos de erros:
- Avisos ou mensagens informativas que têm uma severidade 10 ou menor.
- Erros que têm uma severidade 20 ou maior (verifique a tabela sys.sysmessages), que param o processamento de tarefa do Mecanismo de Banco de Dados do SQL Server para a sessão. Se ocorrer um erro com severidade 20 ou maior e a conexão com o banco de dados não for interrompida, TRY…CATCH tratará o erro.
- Atenções, como solicitações da interrupção de cliente ou conexões de cliente desfeitas.
- Quando a sessão for finalizada por um administrador de sistema com o uso da instrução KILL.
BEGIN TRY
{ sql_statement | statement_block }
END TRY
BEGIN CATCH
[ { sql_statement | statement_block } ]
END CATCH
[ ; ]
Vejamos um exemplo desta implementação com o banco de dados Northwind, utilizando a tabela Employees. Para este exemplo, vamos simular um erro de inserção, tentando inserir uma chave já existente na tabela.
Como o campo EmployeeId além de chave primária, é identity, portanto devemos setar o IDENTITY_INSERT para ON para simular o erro.
BEGIN TRY
SET IDENTITY_INSERT [Northwind].[dbo].[Employees] ON
INSERT INTO [Northwind].[dbo].[Employees]
(employeeid
,[LastName]
,[FirstName]
,[Title]
,[TitleOfCourtesy]
,[BirthDate]
,[HireDate]
,[Address]
,[City]
,[Region]
,[PostalCode]
,[Country]
,[HomePhone]
,[Extension])
VALUES
(1,'Ribeiro'
,'Rodrigo'
,'Sir'
,'Digaum'
,getdate()
,getdate()
,''
,''
,''
,''
,''
,''
,'')
set identity_insert [Northwind].[dbo].[Employees] off
END TRY
BEGIN CATCH
set identity_insert [Northwind].[dbo].[Employees] off
-- Print error information.
PRINT 'Mensagem: ' + CONVERT(varchar(50), ERROR_NUMBER()) +
', Sveridade ' + CONVERT(varchar(5), ERROR_SEVERITY()) +
', Procedure ' + ISNULL(ERROR_PROCEDURE(), '-') +
', Linha ' + CONVERT(varchar(5), ERROR_LINE());
PRINT ERROR_MESSAGE();
END CATCH
Até a próxima!
Nenhum comentário:
Postar um comentário
Leave your comment here!