gebruik RAISERROR met THROW om een SQL Server systeemfout te gooien

geplaatst in: Articles | 0

THROW vervangt RAISERROR in SQL Server en het is de voorkeursmethode om vooruit te gaan om foutmeldingen te verhogen en ze naar de aanroepende code te pushen. THROW is eigenlijk een stuk intuïtiever dan RAISERROR wat betreft hoe je code erop reageert.

THROW is gemaakt als een middel om de foutafhandelingscode in de huidige programmeertalen beter te benaderen. RAISERROR bestaat al sinds 1998, voor het eerst uitgebracht in SQL Server 7.0., THROW werd voor het eerst opgenomen in SQL Server 2012.

RAISERROR is nog steeds opgenomen in de huidige versies van SQL Server, maar er zijn opmerkelijke verschillen tussen hoe de SQL stroomt wanneer RAISERROR wordt aangeroepen vs.wanneer THROW wordt aangeroepen. In het bijzonder stopt RAISERROR niet de uitvoering van de huidige procedure, terwijl THROW altijd de huidige procedure stopt en de fout doorgeeft aan de oproepende procedure.

THROW like RAISERROR staat je toe om aangepaste fouten te “verhogen”, maar het stopt onmiddellijk het huidige proces en geeft de fout terug aan de aanroepende procedure.,

THROW staat je toe om vrijwel alles te doen wat raiserror toegestaan heeft, met een opvallende uitzondering: THROW staat je niet toe om systeemfouten van SQL Server te verhogen. Maar als je een systeemfout moet gooien, kun je het nog steeds doen door eerst RAISERROR in een TRY BLOCK te gebruiken en het bijbehorende CATCH block te gebruiken om de systeemfout te gooien.

voorbeeld:

–het volgende statement resulteert in een fout omdat THROW geen systeem kan gooien uitzonderingen:
THROW 40655, ‘Database master kan niet worden hersteld.,’, 1;

RESULTS:

MSG 35100, Level 16, State 10, Line 2
foutnummer 40655 in de THROW statement valt buiten het geldige bereik. Geef een foutnummer op in het geldige bereik van 50000 tot 2147483647.

maar je kunt deze beperking van het niet kunnen gooien van systeemuitzonderingen omzeilen door het te gebruiken in combinatie met RAISERROR binnen een TRY/CATCH–blok:

– Throw systeemuitzondering door RAISERROR eerst te gebruiken in een TRY / CATCH-blok.,
Begin TRY
PRINT ‘Begin Try’;
RAISERROR (40655, 16, 1);
PRINT ‘End Try’;
END TRY

begin CATCH
PRINT ‘Begin Catch / Before Throwing Error’;
THROW;
PRINT ‘End Catch / After Throwing Error’;
END CATCH;

PRINT ‘After try/Catch’;

resultaten:

Begin Try
Begin catch / before THROPPING error
msg 40655, level 16, State 1, line 3
database ‘master’ kan niet hersteld worden.,

zoals je kunt zien in de resultaten, stopt RAISERROR niet de processtroom, maar staat het je toe om de systeemfouten te verhogen en THROW stopt de processtroom en staat het je toe om systeemfouten die je met RAISERROR raiset naar het aanroepproces te gooien. Met behulp van de twee statements samen kunt u volledige controle over de foutmeldingen en wanneer ze worden teruggestuurd naar de oproepprocedure.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *