Felanatomin och ej fångbara fel

Transaktioner och felhantering i SQL Server

Miriam Antona

Software Engineer

Felanatomin

INSERT INTO products (product_name, stock, price)
    VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
Msg 2627, Level 14, State 1, Line 1
Violation of UNIQUE KEY constraint 'unique_name'. 
Cannot insert duplicate key in object 'dbo.products'. 
The duplicate key value is (Trek Powerfly 5 - 2018).
Transaktioner och felhantering i SQL Server

Felanatomin

Felnummer

Ett felmeddelande där texten "Msg 2627" är markerad, vilket motsvarar felnumret.

  • SQL-fel: 1 till 49999
  • Egna fel: från och med 50001
    select * from sys.messages
| message_id | language_id | severity | ... | text                                                            |
|------------|-------------|----------|-----|-----------------------------------------------------------------|
| ...        | ...         | ...      | ... | ...                                                             |
| 2627       | 1033        | 14       | ... | Violation of %ls constraint '%.*ls'. Cannot insert duplicate... |
| ...        | ...         | ...      | ... | ...                                                             |
Transaktioner och felhantering i SQL Server

Felanatomin

Allvarlighetsgrad

Ett felmeddelande där texten "Level 14" är markerad, vilket motsvarar felets allvarlighetsgrad.

  • 0–10: informationsmeddelanden
  • 11–16: fel som användaren kan åtgärda (villkorsbrott m.m.)
  • 17–24: övriga fel (programvaruproblem, allvarliga fel)
Transaktioner och felhantering i SQL Server

Felanatomin

Tillstånd

Ett felmeddelande där texten "State 1" är markerad, vilket motsvarar felets tillstånd.

  • 1: när SQL Server visar felet
  • 0–255: egna fel
Transaktioner och felhantering i SQL Server

Felanatomin

Rad

Ett felmeddelande där texten "Line 1" är markerad, vilket motsvarar raden där felet uppstod.

Procedur

Ett felmeddelande där texten "Procedure Insert_product" är markerad, vilket motsvarar namnet på den lagrade procedur där felet uppstod.

Transaktioner och felhantering i SQL Server

Ej fångbara fel

  • Allvarlighetsgrad lägre än 11 (11–19 går att fånga)

  • Allvarlighetsgrad 20 eller högre som avbryter anslutningen

  • Kompileringsfel: objekt och kolumner som inte finns

Transaktioner och felhantering i SQL Server

Ej fångbara fel – exempel på kompileringsfel

BEGIN TRY
    SELECT non_existent_column FROM products;
END TRY
BEGIN CATCH
    SELECT 'You are in the CATCH block' AS message;
END CATCH
Msg 207, Level 16, State 1, Line 2
Invalid column name 'non_existent_column'.
Transaktioner och felhantering i SQL Server

Nu kör vi en övning!

Transaktioner och felhantering i SQL Server

Preparing Video For Download...