SQL RAISERROR-sætningen bruges til at sende en brugerdefineret besked til klientapplikationen. Det kan også bruges til at fejlsøge programmet og gælder for fejlhåndteringsmekanismen.
SQL RAISERROR-sætningssyntaks og -parametre
Syntaksen for SQL RAISERROR-sætningen er følgende:
RAISERROR ( { message_text | message_id | @local_variable }
{ ,severity ,state }
[ ,argument [ ,...n ] ]
[ WITH option [ ,...n ] ];
Nedenfor kan du se forklaringen af RAISERROR-søgeordsparametrene, som du kan angive:
message_text – den meddelelse, du vil vise for en fejl. Bemærk: Vi kan tilføje brugerdefinerede meddelelser for at vise fejlinformationen. Se det forklaret i artiklens andet afsnit.
message_id – id'et for fejlmeddelelsen. Hvis du vil vise den brugerdefinerede besked, skal du definere den. Se listen over message_ids i sys.messages DMV .
Forespørgsel
select * from sys.messages
Udgangen:
alvorlighed – alvoren af en fejl. Datatypen for alvorligheden variabel er smallint , og værdierne er mellem 0 og 25. De gyldige værdier for fejlens alvor er som følger:
- 0-10 – informative beskeder
- 11-18 – fejl
- 19-25 – fatale fejl
Bemærk : Hvis du opretter en brugerdefineret meddelelse, vil den alvorlighedsgrad, der er angivet i den brugerdefinerede meddelelse, blive tilsidesat af den alvorlighed, der er angivet i RAISERROR-sætningen.
stat – det unikke identifikationsnummer, som du kan bruge til at identificere den kodesektion, der forårsager fejlen. Datatypen for tilstandsparameteren er smallint , og værdierne er mellem 0 og 255.
Lad os nu gå videre til praktiske eksempler.
Eksempel 1:Brug SQL Server RAISERROR-sætning til at udskrive output
I dette eksempel kan du se, hvordan vi kan vise fejl- eller informationsmeddelelsen ved hjælp af RAISERROR-sætningen.
Antag, at du vil vise meddelelsen efter at have indsat poster i tabellen. Vi kan bruge SQL PRINT eller RAISERROR-sætninger. Følgende er koden:
SET nocount ON
INSERT INTO tblpatients
(patient_id,
patient_name,
address,
city)
VALUES ('OPD00006',
'Nimesh Upadhyay',
'AB-14, Ratnedeep Flats',
'Mehsana')
RAISERROR ( 'Patient detail added successfully',1,1)
Udgangen:
Som du kan se på billedet ovenfor, er besked-id'et 50000, fordi det er en brugerdefineret besked.
Eksempel 2:SQL RAISERROR-sætning med den dynamiske meddelelsestekst
Se nu, hvordan vi kan oprette den dynamiske beskedtekst til SQL RAISERROR-sætningen.
Antag, at vi ønsker at udskrive patientens ID i meddelelsen. Jeg har defineret den lokale variabel ved navn @PatientID , som indeholder patient_id . For at vise værdien af @patientID variabel i beskedteksten, kan vi bruge følgende kode:
DECLARE @PatientID VARCHAR(15)
DECLARE @message NVARCHAR(max)
SET @PatientID='OPD00007'
SET @message ='Patient detail added successfully. The OPDID is %s'
INSERT INTO tblpatients
(patient_id,
patient_name,
address,
city)
VALUES ('' + @PatientID + '',
'Nimesh Upadhyay',
'AB-14, Ratnedeep Flats',
'Mehsana')
RAISERROR ( @message,1,1,@patientID)
Udgangen:
For at vise strengen i RAISERROR-sætningen skal vi bruge C-style print-sætningerne.
Som du kan se på billedet ovenfor, til vise parameteren i meddelelsesteksten, har jeg brugt %s mulighed der viser parameterens strengværdi . Hvis du ønsker at vise heltalsparameteren , kan du bruge %d mulighed .
Brug SQL RAISERROR i TRY..CATCH Block
I dette eksempel tilføjer vi SQL RAISERROR i TRY-blokken. Når vi kører denne kode, udføres den til den tilhørende CATCH-blok. I CATCH-blokken vil vi vise detaljerne om den påberåbte fejl.
BEGIN try
RAISERROR ('Error invoked in the TRY code block.',16,1 );
END try
BEGIN catch
DECLARE @ErrorMsg NVARCHAR(4000);
DECLARE @ErrSeverity INT;
DECLARE @ErrState INT;
SELECT @ErrorMsg = Error_message(),
@ErrSeverity = Error_severity(),
@ErrState = Error_state();
RAISERROR (@ErrorMsg,
@ErrSeverity,
@ErrState
);
END catch;
Derfor har vi tilføjet RAISERROR-sætningen med alvorligheden mellem 11-19. Det forårsager udførelsen af CATCH-blokken.
Indenfor CATCH-blokken viser vi oplysningerne om den oprindelige fejl ved hjælp af RAISERROR-sætningen.
Udgangen:
Som du kan se, har koden returneret informationen om den oprindelige fejl.
Lad os nu forstå, hvordan vi kan tilføje en tilpasset besked ved hjælp af sp_addmessage gemt procedure.
sp_addmessage lagret procedure
Vi kan tilføje den tilpassede besked ved at udføre sp_addmessages gemt procedure. Syntaksen er:
EXEC Sp_addmessage
@msgnum= 70001,
@severity=16,
@msgtext='Please enter the numeric value',
@lang=NULL,
@with_log='TRUE',
@replace='Replace';
@msgnum: Angiv meddelelsesnummeret. Datatypen for parameteren er heltal. Det er et meddelelses-id for den brugerdefinerede meddelelse.
@severity: Angiv fejlens sværhedsgrad. De gyldige værdier er mellem 1 og 25. Datatypen for parameteren er smallint.
@messagetext: Angiv den besked, du vil vise. Datatypen for parameteren er nvarchar(255), og standardværdien er NULL.
@lang: Angiv det sprog, du vil bruge til at vise fejlmeddelelsen. Standardværdien er NULL.
@with_log: Denne parameter bruges til at skrive beskeden til begivenhedsfremviseren. De gyldige værdier er TRUE og FALSE. Hvis du angiver TRUE, vil fejlmeddelelsen blive skrevet til Windows Event Viewer. Hvis du vælger FALSK, vil fejlen ikke blive skrevet til Windows fejllog.
@erstat: Hvis du vil erstatte den eksisterende fejlmeddelelse med en brugerdefineret meddelelse og sværhedsgrad, kan du angive erstatningen i den lagrede procedure.
Antag, at du vil oprette en fejlmeddelelse, der returnerer en ugyldig kvalitet fejl. I INSERT-sætningen, værdien af product_quantity er mellem 20 og 100. Meddelelsen skal behandles som en fejl, og sværhedsgraden er 16.
For at oprette meddelelsen skal du køre følgende forespørgsel:
USE master;
go
EXEC Sp_addmessage
70001,
16,
N'Product Quantity must be between 20 and 100.';
go
Når meddelelsen er blevet tilføjet, skal du køre nedenstående forespørgsel for at se den:
USE master
go
SELECT * FROM sys.messages WHERE message_id = 70001
Udgangen:
Sådan bruges brugerdefinerede fejlmeddelelser
Som jeg nævnte tidligere, skal vi bruge message_id i RAISERROR-sætningen for de brugerdefinerede meddelelser.
Vi har oprettet en besked med ID 70001. RAISERROR-sætningen skal være som følger:
USE master
go
RAISERROR (70001,16,1 );
go
Udgangen:
RAISERROR-sætningen har returneret den brugerdefinerede besked.
sp_dropmessage Stored Procedure
sp_drop-meddelelsen gemt procedure bruges til at slette brugerdefinerede beskeder. Syntaksen er følgende:
EXEC Sp_dropmessage @msgnum
I syntaksen @msgnum angiver ID'et for den besked, du vil slette.
Nu vil vi slette den besked, hvis ID er 70001 . Forespørgslen er som følger:
EXEC Sp_dropmessage 70001
Når meddelelsen er blevet slettet, skal du køre følgende forespørgsel for at se den:
USE master
go
SELECT * FROM sys.messages WHERE message_id = 70001
Udgangen:
Som du kan se, er beskeden blevet slettet.
Oversigt
Derfor har vi udforsket RAISERROR-sætningen, dens parametre og demonstreret dens brug i praktiske eksempler. Vi har også præciseret brugen af sp_addmessage og sp_dropmessage lagrede procedurer. Håber, at denne artikel bragte dig nogle nyttige indsigter til dine arbejdsmål.
Vi er altid glade for at høre dine kommentarer og måske yderligere praktiske tips, hvis du gerne vil dele dem.