SQL Server -kastuttalelse

SQL Server -kastuttalelse

Feil er uunngåelige når det gjelder utviklingen. Det er derfor en god plan å sikre at du iverksatte noen tiltak slik at feilene ikke bryter funksjonaliteten til applikasjonen din.

SQL Server lar oss bruke kastuttalelsen for å heve et unntak. Vi overfører deretter utførelseskonteksten til et forsøk og fange blokkering for å håndtere feilen.

Syntaks

Følgende kodebit viser syntaks for kastuttalelsen:

Kast [error_numer,
feilmelding,
stat];

Argumentene i den medfølgende syntaks inkluderer følgende:

  1. Feil_nummer - Dette er en heltallverdi som bestemmer det hevede unntaket. Feilnummeret må være i området 50000 og 2147483647. Husk at feilkodene under 50000 er forbeholdt SQL Server -motoren.
  2. Feilmelding - Dette refererer til en strengverdi som fungerer som beskrivelsen for det hevede unntaket. Det må være av type nvarchar.
  3. stat - Statens argument er en heltallverdi i området 0 til 255, og betegner staten tilknyttet feil_message.

Merk: Enhver uttalelse før en kasteklausul må avsluttes med en semikolon. SQL -serveren krever også at kastet inkluderer de tidligere argumentene. Hvis kastuttalelsen ikke har de tidligere argumentene, må den lukkes i en prøve/fangstblokk.

Syntaksen er som følger:

Begynn å prøve
-- potensielle feil
Slutt prøv
Begynn fangst
-- Gjør dette hvis feil oppstår
KASTE;
Sluttfangst

Du kan ikke bruke % -tegnet i parameteren Error_Message. Dette er fordi det er en reservert karakter. Hvis du trenger å inkludere%-tegn i feilmeldingen din, må du sørge for å unnslippe den ved å ha dobbeltprosenttegn (%%).

SQL Server -kast uttalelseseksempler

La oss se på noen eksempler på kastuttalelsen i aksjon.

SQL Server ved å bruke kastuttalelsen for å kaste unntak

Følgende eksempel viser å bruke kastuttalelsen for å heve et unntak:

Kast 50001, '[mislykkes] - den forespurte verdien er ikke funnet.', 1;

I dette eksemplet bruker vi kastuttalelsen for å heve et unntak med feilkoden 50001 og tilstanden til 1.

Den resulterende utgangen er som følger:

SQL -feil [50001] [S0001]: [FAIL] - Den forespurte verdien er ikke funnet.

SQL Server rethrows unntaket ved å bruke kastuttalelsen

Vi kan også bruke kast unntaket for å se på det siste unntaket på nytt. Et eksempelkode er som følger:

slippbord hvis finnes t;
Lag tabell T (
id int ikke null primærnøkkel,
);
begynn å prøve
sett inn i t (id) verdier (1);
-- Kast unntak
sett inn i t (id) verdier (1);
Slutt prøv
Begynn fangst
print ('feil fanget');
kaste;
sluttfangst;

Den forrige spørringen skal skrive ut følgende:

feil fanget
SQL Feil [2627] [23000]: Brudd på primær nøkkelbegrensning 'PK__T__3213E83F35AD099E'. Kan ikke sette inn duplikatnøkkel i objektet 'dbo.t '. Duplikatnøkkelverdien er (1).

Bruke formatmeldingen til å kaste en tilpasset melding

Følgende eksempel viser hvordan du bruker FormatMessage -funksjonen for å kaste et unntak med en tilpasset melding:

Exec Sys.Sp_addMessage @msgnum = 50001,
@severity = 20,
@MSGText = 'En tilpasset melding inkludert variabel: %D',
@Lang = 'US_English',
@with_log = falsk,
@replace = null;
erklære @msg nvarchar (2048) = FormatMessage (50001, 100);
kast 50001, @msg, 1;

I dette tilfellet lar FormatMessage -funksjonen oss legge til de tilpassede meldingene inkludert variabler. Igjen kan du sjekke dokumentene på SQL Server SP_AddMessage () for å lære mer.

Den resulterende feilmeldingen er som følger:

SQL -feil [50001] [S0001]: En tilpasset melding inkludert variabel: 100

Konklusjon

Dette innlegget diskuterte hvordan du kan bruke kasteklausulen i SQL -serveren for å heve et unntak.

Takk for at du leste!