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]

Sobre Marcos Freccia

MVP em SQL Server (Data Plataform) , especialista em SQL Server, e atualmente trabalhando com Microsoft Azure!

Publicado em julho 24, 2012, em Desenvolvimento, SQL Server 2012, VirtualPass e marcado como , , . Adicione o link aos favoritos. 2 Comentários.

  1. 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.

  1. Pingback: Melhorias no SQL Server 2012 « Alex Souza

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: