sql >> Database >  >> RDS >> Sqlserver

Hoe krijg ik een SQL-fout in de opgeslagen procedure?

Hier is een deel van een sjabloon voor opgeslagen procedures dat ik gebruik:

/*  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  */

Try/Catch-blokken kunnen lastig zijn, maar zijn veel grondiger dan @@error. Wat nog belangrijker is, u kunt de verschillende error_xxx()-functies erin gebruiken. Hier sla ik de juiste foutmelding op in variabele @ErrorMessage, samen met voldoende andere gegevens om de fout opnieuw op te heffen. Vanaf hier is een willekeurig aantal opties beschikbaar; je kunt @ErrorMessage een uitvoervariabele maken, specifieke fouten testen en afhandelen, of je eigen foutmeldingen maken (of de bestaande aanpassen om duidelijker te zijn - je kunt geïrriteerd raken als je erachter komt hoe vaak je dat wilt doen). Andere opties zullen zich presenteren.

Iets om op te letten:in sommige situaties gooit SQL twee foutmeldingen achter elkaar... en error_message() zal alleen de laatste vangen, die meestal iets zegt als "poging om object te maken is mislukt", met de echte fout in de eerste foutmelding. Dit is waar het maken van uw eigen foutmelding van pas komt.



  1. Symfony:Er is een uitzondering opgetreden in stuurprogramma:kon stuurprogramma niet vinden met mysql

  2. Hoe waarden uit een kolom te extraheren en het resultaat in een andere kolom bij te werken

  3. Hoeveel kolommen mag je (maximaal) in een MySQL-tabel hebben?

  4. Foutopsporing in SQL Server T-SQL in Visual Studio 2012