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.
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.
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]
Publicado em julho 24, 2012, em Desenvolvimento, SQL Server 2012, VirtualPass e marcado como Desenvolvimento, SQL Server 2012, THROW. Adicione o link aos favoritos. 2 Comentários.
muito legal isso. Marcos preciso lançar uma janela quando executar um erro no script, com a mensagem de erro, este script executa em um instalador, e preciso lançar a janela de erro avisando o porque o script parou, como faço, usei o RAISERRO, mas não mostrou a mensagem.
Pingback: Melhorias no SQL Server 2012 « Alex Souza