Blog Archives

SQL Server 2012: THROW

Olá pessoal,

Uma das novas funcionalidades presentes na parte de programação no SQL Server 2012 é o recurso THROW. Esse recurso permite que façamos o lançamento de uma exceção no bloco CATCH quando estamos trabalhando com uma estrutura de erros TRY…CATCH.

Um dos recursos legais que o THROW permite é que você além de jogar na tela sua mensagem de erro personalizada, você pode permitir que ainda assim os erros provenientes do SQL Server sejam retornados na tela. É valido lembrar que em outras versões do SQL Server no bloco CATCH precisamos colocar uma mensagem de erro personalizada e a real mensagem de erro não aparece.

Para demonstrar a utilização dessa clausula, vamos a um breve script.

use master
go
create database db_throw
go
use db_throw
go
create table tblThrow (id int identity primary key, nome varchar(20))
go

create procedure spInsertNewRow
@Name varchar(30)
as

BEGIN TRY
insert into tblThrow
values (@Name)
END TRY
BEGIN CATCH

print ‘ERROR OCURRED’;
THROW;
END CATCH;

Temos aqui apenas a criação de uma nova base de dados e a criação de uma procedure que realiza a inserção de novos registros. Um ponto interessante a ser notado nessa nova clausula é a necessidade das sintaxes dentro do bloco catch estarem sempre finalizadas com ponto e virgula “;”.

Se realizássemos uma inserção deste tipo: exec spInsertNewRow ‘Microsoft SQL Server 2012’ onde nosso campo é um varchar de 20 e temos ao todo 25 caracteres teriamos o seguinte erro.

image

Como podemos ver além do texto personalizado que coloquei no bloco catch a clausula THROW possibilitou que o verdadeiro erro também fosse jogado na tela. Apenas por via das duvidas vamos demonstrar a mesma procedure sem essa nova clausula.

alter procedure spInsertNewRow
@Name varchar(30)
as

BEGIN TRY
insert into tblThrow
values (@Name)
END TRY
BEGIN CATCH

print ‘ERROR OCURRED’;
END CATCH;

E seguido da chamada da procedure exec spInsertNewRow ‘Microsoft SQL Server 2012’ teriamos exatamente o erro que mostra a figura abaixo.

image

Pois é pessoal como podemos ver a clausula THROW nos traz ai mais algumas possibilidades de modificação no nosso codigo.

Espero que tenham gostado desse simples post e até a proxima.

Abraços,
Marcos Freccia
[MCTS|MCITP|MCT SQL Server 2008]