usando o RAISERROR com o THROW para lançar um erro do sistema de servidor SQL

posted in: Articles | 0

THROW substitui o RAISERROR no servidor SQL e é o método preferido a seguir para a frente para criar mensagens de erro e empurrá-las para o código de chamada. O lançamento é muito mais intuitivo do que o RAISERROR, na medida em que o seu código responde a ele.

THROW foi criado como um meio para combinar mais de perto o código de manipulação de erros em linguagens de programação atuais. RAISERROR existe desde 1998, lançado pela primeira vez no servidor SQL 7.0., O THROW foi incluído pela primeira vez no SQL Server 2012.

RAISERROR ainda está incluído nas versões atuais do servidor SQL, mas existem diferenças notáveis entre como o SQL flui quando RAISERROR é chamado vs. quando o THROW é chamado. Especificamente, RAISERROR não impede a execução do procedimento atual, enquanto o THROW sempre pára o procedimento atual e passa o erro para o procedimento de chamada.

jogar como RAISERROR permite-lhe” aumentar ” os erros personalizados, mas interrompe imediatamente o processo actual e devolve o erro ao procedimento de chamada.,

O lançamento permite-lhe fazer praticamente tudo o que o RAISERROR permitiu, com uma excepção notável: o lançamento não lhe permite aumentar os erros do sistema do servidor SQL. Mas se você precisa jogar um erro do sistema, você ainda pode fazê-lo usando primeiro RAISERROR em um bloco de tentativa e usando jogar no bloco de captura correspondente para jogar o erro do sistema.

exemplo:

–a seguinte declaração resulta em um erro porque THROW não pode jogar exceções do Sistema:
THROW 40655, ‘ Database master não pode ser restaurado.,’, 1;

resultados:

Msg 35100, nível 16, Estado 10, Linha 2
número de erro 40655 na declaração de lançamento está fora do intervalo válido. Indicar um número de erro no intervalo válido de 50000 a 2147483647.

mas você pode trabalhar em torno desta limitação de jogar de não ser capaz de jogar exceções do sistema, usando–o em conjunto com RAISERROR dentro de um bloco de tentativa/captura:

– jogar exceção do sistema usando RAISERROR primeiro em um bloco de tentativa/captura.,
BEGIN
PRINT ‘Begin’;
RAISERROR (40655, 16, 1);
PRINT ‘End Try’;
END TRY

COMEÇAR a PEGAR
PRINT ‘Começar a Pegar / Antes de Atirar de Erro’;
LANCE;
PRINT ‘End Catch / Depois de jogar Erro’;
FINAL de CAPTURA;

PRINT ‘Após o Try/Catch’;

RESULTADOS:

Begin
Começar a Pegar / Antes de Atirar Erro
Msg 40655, Nível de 16, Estado 1, Linha 3
Banco de dados ‘mestre’ não pode ser restaurado.,

Como pode ver nos resultados, o RAISERROR não interrompe o fluxo do processo, mas permite-lhe aumentar os erros do sistema e o lançamento interrompe o fluxo do processo e permite-lhe lançar os erros do sistema que cria com o RAISERROR para o processo de chamada. Usando as duas declarações juntas, você tem o controle total das mensagens de erro e quando elas são devolvidas ao procedimento de chamada.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *