Tratando Erros No MsSQL – RAISERROR

mssql serverNas matérias anteriores passamos conteúdo relacionado a conexão, criptografia, tipos de campos, entre outros, porém, hoje quero lhe falar sobre um assunto essencial!

Só quem já teve o “privilégio” de encontrar um erro e passar horas para solucioná-lo, sabe o quanto é constrangedor e  desgastante.

Em algumas linguagens de programação, geralmente se usa comandos como “print”, “echo”, “fprint”, entre outros. No SQL usamos o RAISERROR.

Este comando é similar aos que você já conhece, porém, aparece em forma de erro, ou seja, como uma Exception gerada pelo SQL.

Ele pode ser usado de forma variada, te auxiliando na solução de problemas!

Abaixo vamos dar alguns exemplos práticos onde ele pode ser usado.

Criando A Tabela Na Base De Dados

Antes de partirmos para os testes de programação, abra o arquivo script-sql.txt (disponível no arquivo em anexo) e cole seu conteúdo no Programa utilizado para gerenciamento da base de dados.


-----CRIA A TABELA DE USUÁRIOS -----

CREATE TABLE `Usuarios` (

`id_banner` int(11) NOT NULL auto_increment,

`Nome` varchar(80) default NULL,

`Email` varchar(80) NOT NULL default '',

KEY `id` (`id`)

);

INSERT INTO `Usuarios` VALUES ('1','Usuario 01','teste@teste.com');
INSERT INTO `Usuarios` VALUES ('2','Usuario 02','teste2@teste.com');
INSERT INTO `Usuarios` VALUES ('3','Usuario 03','teste3@teste.com');
-----

Como Usá-lo?

O RAISERROR pode ser usado através textos e variáveis que trarão ao usuário mensagem ou erro que definirá a gravidade ou apontará o que está acontecendo no Sistema.

Disponibilizamos abaixo alguns exemplos de como ele pode ser usado:

1 – Mostrando Erro Simples:

Através do exemplo abaixo, o SQL Server poderá mostrar uma mensagem dizendo que “você gerou um erro”.

Exemplo:

RAISERROR(‘Você gerou um Erro’, 16, 1)

2 – Usando Procedure:

O exemplo abaixo é usado em uma procedure, onde vamos inserir um usuário. Porém, se ele já existir na base de dados, deverá retornar um erro, dizendo “usuário já cadastrado”.

Exemplo:

CREATE PROCEDURE [dbo].[Usuario_Inserir]

@Nome VARCHAR(100)

@Email VARCHAR(100)

AS

BEGIN

IF
NOT EXISTS (SELECT Email FROM Usuarios WHERE Email = @Email)

BEGIN

INSERT
INTO [dbo].[Usuarios]

([Nome]

,[Email])

VALUES
(@Nome

,@Email)


END

ELSE

BEGIN
RAISERROR(‘Usuário já
cadastrado’
, 16, 1)

END

END

3 – Procedure sp_addmessage:

Uma das formas mais práticas para você trabalhar com outros idiomas (ou situações similares) é através do sp_addmessage.

Através dele é possível personalizar a mensagem.

Exemplo:

EXEC sp_addmessage 50010,

18,

‘%s already registered’,

‘us_english’

EXEC sp_addmessage 50010,

18,

‘Usuário %s já cadastrado’,

‘Português’

Abaixo você verá um exemplo mais prático e completo de como podemos usar o sp_addmessage em uma Procedure.

Exemplo:

ALTER PROCEDURE [dbo].[Usuario_Inserir]

@Nome VARCHAR(100),

@Email VARCHAR(100)

AS

BEGIN

IF
NOT EXISTS
(SELECT Email FROM Usuarios WHERE Email = @Email)

BEGIN

INSERT
INTO [dbo].[Usuarios]

([Nome]

,[Email])

VALUES
(@Nome

,@Email)


END

ELSE

BEGIN
RAISERROR(50010, 16,
1, @Nome)


END

END

Veja que baseado no exemplo do sp_addmessage, na chamada do RAISERROR passamos o Id do erro que criamos e padronizamos no formato de String (String: %s, Int: %d).

4 – Usando o RAISERROR com TRY e CATCH:

Como você já viu acima, o RAISERROR pode ser usado em várias situações!

Preparamos abaixo um exemplo de uso em um TRY e CATCH do SQL.

Exemplo:

BEGIN TRY

PRINT 1

RAISERROR (‘Aqui
gerou Erro antes de imprimir 2′
,

22,

1

) WITH LOG

PRINT
2

END TRY

BEGIN CATCH

DECLARE @ErrorMessage NVARCHAR(4000);

DECLARE @ErrorSeverity
INT;

DECLARE @ErrorState
INT;

SELECT @ErrorMessage = ERROR_MESSAGE(),

@ErrorSeverity
= ERROR_SEVERITY(),

@ErrorState
= ERROR_STATE();

RAISERROR (@ErrorMessage,

@ErrorSeverity,

@ErrorState)

END CATCH

Veja que trata-se de uma aplicação prática!

Tente usar este padrão em suas aplicações…

Ficamos por aqui em mais uma matéria! Esperamos tê-lo ajudado em algo.

Envie-nos suas dúvidas e envie-nos sugestões para as próximas matérias!

DOWNLOAD: Descarregue o código utilizado neste tutorial Tratando Erros Em MSSQL, em formato .zip.

Be Sociable, Share!

Participa! Comenta...