Brug RAISERROR med SMIDE at Smide en SQL Server-System Fejl

posted in: Articles | 0

SMIDE erstatter RAISERROR i SQL Serveren, og det er den foretrukne metode at gå fremad for at hæve fejlmeddelelser, og skub dem til den kaldende kode. Thro.er faktisk meget mere intuitiv end RAISERROR for så vidt angår hvordan din kode reagerer på den.

kast blev oprettet som et middel til tættere at matche fejlhåndteringskode i de nuværende programmeringssprog. RAISERROR har eksisteret siden 1998, først udgivet i s .l Server 7.0., Kast blev først inkluderet i s .l Server 2012.

RAISERROR er stadig inkluderet i de nuværende versioner af SQL Server, men der er bemærkelsesværdige forskelle mellem, hvordan SQL flyder, når RAISERROR kaldes vs, når KAST kaldes. Specifikt stopper RAISERROR ikke udførelsen af den nuværende procedure, mens thro.altid stopper den aktuelle procedure og passerer fejlen op til opkaldsproceduren.

kast som RAISERROR giver dig mulighed for at “hæve” brugerdefinerede fejl, men det stopper straks den aktuelle proces og returnerer fejlen til opkaldsproceduren.,

thro.giver dig mulighed for at gøre stort set alt, hvad RAISERROR tilladt, med en bemærkelsesværdig undtagelse: thro. tillader dig ikke at hæve s .l Server systemfejl. Men hvis du har brug for at kaste en systemfejl, kan du stadig gøre det ved først at bruge RAISERROR i en prøveblok og bruge kast i den tilsvarende FANGSTBLOK for at kaste systemfejlen.

eksempel:

–følgende erklæring resulterer i en fejl, fordi kast ikke kan kaste system undtagelser:
Kast 40655, ‘Database master kan ikke gendannes.,’, 1;

resultater:

Msg 35100, niveau 16, tilstand 10, Linje 2
fejlnummer 40655 i KASTESÆTNINGEN ligger uden for det gyldige interval. Angiv et fejlnummer i det gyldige interval på 50000 til 2147483647.

Men du kan omgå denne begrænsning, KAST af ikke at være i stand til at kaste system undtagelser ved at bruge det i forbindelse med RAISERROR i en TRY/CATCH-blok:

–Kaste-system undtagelse ved hjælp RAISERROR første i en TRY/CATCH blok.,
BEGYNDE at PRØVE
UDSKRIV ‘Begynder at Prøve’;
RAISERROR (40655, 16, 1);
UDSKRIV ‘for at Afslutte Prøv’;
AFSLUT PRØVE

BEGYND FANGE
UDSKRIV ‘Begynde at Fange / Før du Kaster Fejl’;
KASTE;
PRINT ‘Ende Fange / Efter at Kaste Fejl’;
AFSLUT FANGE;

PRINT “Efter Try/Catch’;

RESULTATER:

Begynd Prøve
Begynder at Fange / Før du Kaster Fejl
” Msg 40655, Level 16, Staten 1, Linje 3
Database ‘master’ kan ikke gendannes.,

som du kan se i resultaterne, stopper RAISERROR ikke processtrømmen, men giver dig mulighed for at hæve systemfejlene, og kaste stopper processtrømmen og giver dig mulighed for at kaste systemfejl, du hæver med RAISERROR til opkaldsprocessen. Brug af de to udsagn sammen giver dig mulighed for at have fuld kontrol over fejlmeddelelserne, og når de returneres til opkaldsproceduren.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *