använda RAISERROR med kasta för att kasta ett SQL Server-systemfel

posted in: Articles | 0

kasta ersätter RAISERROR i SQL Server och det är den föredragna metoden som går framåt för att höja felmeddelanden och driva dem till uppringningskoden. Kasta är faktiskt mycket mer intuitivt än RAISERROR så långt som hur din kod svarar på den.

kasta skapades som ett sätt att närmare matcha felhanteringskod i nuvarande programmeringsspråk. RAISERROR har funnits sedan 1998, först släpptes i SQL Server 7.0., Kasta ingick först i SQL Server 2012.

RAISERROR ingår fortfarande i nuvarande versioner av SQL Server, men det finns anmärkningsvärda skillnader mellan hur SQL-flödena när RAISERROR kallas vs. När kasta kallas. Specifikt stoppar RAISERROR inte utförandet av den aktuella proceduren, medan kasta alltid stoppar den aktuella proceduren och skickar felet upp till anropsproceduren.

kasta som RAISERROR låter dig ”höja” egna fel, men det stoppar omedelbart den aktuella processen och returnerar felet till anropsproceduren.,

kasta låter dig göra ganska mycket allt som RAISERROR tillåtet, med ett anmärkningsvärt undantag: kasta tillåter dig inte att höja SQL Server systemfel. Men om du behöver kasta ett systemfel kan du fortfarande göra det genom att först använda RAISERROR i ett FÖRSÖKSBLOCK och använda kasta i motsvarande fångstblock för att kasta systemfelet.

exempel:

–följande uttalande resulterar i ett fel eftersom kasta inte kan kasta system undantag:
kasta 40655, ’databas master kan inte återställas.,’, 1;

resultat:

Msg 35100, nivå 16, tillstånd 10, Linje 2
felnummer 40655 I kasta uttalande ligger utanför det giltiga intervallet. Ange ett felnummer i det giltiga intervallet 50000 till 2147483647.

men du kan undvika denna begränsning av kast för att inte kunna kasta system undantag genom att använda den i samband med RAISERROR inom ett försök/fångstblock:

–kasta system undantag genom att använda RAISERROR först i ett försök/fångstblock.,
börja prova
Skriv ut ’börja prova’;
RAISERROR (40655, 16, 1);
Skriv ut ’avsluta försök’;
avsluta försök

börja fånga
Skriv ut ’börja fånga / innan kasta fel’;
kasta;
Skriv ut ’avsluta fångst / efter kasta fel’;
avsluta fångst;

Skriv ut ’efter försök/fånga’;

resultat:

börja prova
börja fånga / innan du kastar fel
msg 40655, nivå 16, stat 1, linje 3
databasen ”Master” kan inte återställas.,

som du kan se i resultaten stoppar RAISERROR inte processflödet men låter dig höja systemfel och kasta stoppar processflödet och låter dig kasta systemfel du höjer med RAISERROR till samtalsprocessen. Genom att använda de två uttalandena tillsammans kan du ha full kontroll över felmeddelandena och när de returneras till samtalsproceduren.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *