Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak uzyskać błąd sql w procedurze składowanej?

Oto część szablonu procedury składowanej, którego używam:

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

Bloki Try/Catch mogą być trudne, ale są znacznie dokładniejsze niż @@error. Co ważniejsze, możesz używać w nich różnych funkcji error_xxx(). Tutaj przechowuję poprawny komunikat o błędzie w zmiennej @ErrorMessage, wraz z wystarczającą ilością innych danych, aby ponownie zgłosić błąd. Stąd dostępna jest dowolna liczba opcji; możesz uczynić @ErrorMessage zmienną wyjściową, testować i obsługiwać określone błędy lub tworzyć własne komunikaty o błędach (lub dostosować istniejące, aby były bardziej przejrzyste -- możesz się irytować, gdy dowiadujesz się, jak często chcesz to robić). Inne opcje zaprezentują się same.

Coś, na co należy zwrócić uwagę:w niektórych sytuacjach SQL wyrzuci dwa komunikaty o błędach z powrotem... i error_message() złapie tylko ostatni, który zwykle mówi coś w rodzaju „próba utworzenia obiektu nie powiodła się”, z prawdziwym błędem podanym w pierwszym komunikacie o błędzie. W tym miejscu pojawia się tworzenie własnego komunikatu o błędzie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Analiza wydajności we/wy dla SQL Server

  2. Jak wdrożyć odznaki?

  3. SQL do wyprowadzenia numeru wiersza w wynikach zapytania

  4. Błąd importu pliku CSV:Wartość kolumny zawierająca ogranicznik kolumny

  5. Jak skopiować tabele unikając kursorów w SQL?