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

Sådan får du sql-fejl i den lagrede procedure

Her er en del af en lagret procedureskabelon, jeg bruger:

/*  CREATE PROCEDURE...  */

DECLARE
  @ErrorMessage   varchar(2000)
 ,@ErrorSeverity  tinyint
 ,@ErrorState     tinyint

/*  Additional code  */

BEGIN TRY

/*  Your code here  */

END TRY

BEGIN CATCH
    SET @ErrorMessage  = ERROR_MESSAGE()
    SET @ErrorSeverity = ERROR_SEVERITY()
    SET @ErrorState    = ERROR_STATE()
    RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState)

    BREAK
END CATCH

/*  Further cleanup code  */

Prøv/fang-blokke kan være vanskelige, men er meget mere grundige end @@error. Endnu vigtigere, du kan bruge de forskellige error_xxx()-funktioner i dem. Her gemmer jeg den korrekte fejlmeddelelse i variabel @ErrorMessage sammen med nok andre data til at genrejse fejlen. Herfra er et vilkårligt antal muligheder tilgængelige; du kan gøre @ErrorMessage til en outputvariabel, teste for og håndtere specifikke fejl eller bygge dine egne fejlmeddelelser (eller justere de eksisterende for at være tydeligere - du kan blive irriteret over at finde ud af, hvor ofte du vil gøre det). Andre muligheder vil præsentere dem.

Noget at holde øje med:I nogle situationer vil SQL sende to fejlmeddelelser ryg mod ryg... og error_message() vil kun fange den sidste, som normalt siger noget som "forsøg på at oprette objekt mislykkedes", med den rigtige fejl angivet i den første fejlmeddelelse. Det er her, at bygge din egen fejlmeddelelse kommer ind.



  1. Sådan lukkes sårbarhedsgabet i PostgreSQL

  2. Fanger fejlmeddelelse fra SQL Server i VBA i Excel

  3. Hvordan kunne jeg kontrollere antallet af aktive sqlalchemy-forbindelser i en pulje på et givet tidspunkt?

  4. er det muligt at have accentfølsom og case-ufølsom utf8-sortering i mysql?