sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server RAISERROR-erklæring med simple eksempler

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.


  1. Hvordan gemmer man BLOB som fil i PL/SQL?

  2. Multi-Cloud-implementering til MariaDB-replikering ved hjælp af WireGuard

  3. Automatisk dataindsamling af databaseskemaændringer i MS SQL Server

  4. Sådan sorteres resultatet fra string_agg()