sql >> Databáze >  >> RDS >> Sqlserver

Co je SQL Server RAISERROR?

Když se ve vašem T-SQL něco pokazí, chcete problém rychle vyřešit s minimálním překopáváním a rušením uživatelů. Chybové zprávy generované SQL Serverem jsou vysoce technické a těžko pochopitelné, což může ztížit izolování problémů a zpomalit dobu řešení. Naštěstí mohou správci databází implementovat SQL Server RAISERROR jako alternativu k chybovým zprávám SQL Server.

RAISERROR je příkaz SQL Server pro zpracování chyb, který generuje chybovou zprávu a zahajuje zpracování chyb. RAISERROR může buď odkazovat na uživatelem definovanou zprávu, která je uložena v zobrazení katalogu sys.messages, nebo může vytvořit zprávu dynamicky. Zpráva je vrácena jako chybová zpráva serveru volající aplikaci nebo přidruženému bloku CATCH konstrukce TRY...CATCH.

Existuje několik scénářů, ve kterých je vhodné použít příkaz RAISERROR:

  • Odstraňování problémů s kódem Transact-SQL
  • Vracení zpráv, které obsahují proměnný text
  • Zkoumání hodnot dat
  • Když potřebujete, aby provedení skočilo z bloku TRY do přidruženého bloku CATCH nebo vrátilo informace o chybě z bloku CATCH volajícím

Je důležité si uvědomit, že při vývoji nových aplikací je nyní pro zpracování chyb vhodnější příkaz THROW před RAISERROR. Ale o tom později.

Proč používat RAISERROR pro zpracování chyb serveru SQL?

Existují dva hlavní důvody pro volbu RAISERROR před zpracováním chyb generovaných SQL Serverem:

  1. Zprávy RAISERROR lze přizpůsobit s ohledem na úroveň závažnosti a stavu
  2. Mohou být napsány v přirozeném jazyce, který je snadno srozumitelný

RAISERROR vrací chybové zprávy do aplikace ve stejném formátu, který je generován databázovým strojem SQL Server. Umožňuje vývojářům generovat své vlastní chybové zprávy, takže kdokoli, kdo si zprávu přečte, bude schopen porozumět skutečnému problému, místo aby se snažil dešifrovat technickou chybovou zprávu SQL Server. Vývojáři mohou také nastavit vlastní úroveň závažnosti, ID zprávy a stav chybových zpráv.

Použití RAISERROR s konstrukcí TRY...CATCH

TRY...CATCH je konstrukce pro zpracování chyb, která umožňuje spustit kód v sekci TRY a zpracovat chyby v sekci CATCH. Obecně platí, že TRY...CATCH je účinný způsob, jak identifikovat mnoho chyb T-SQL, ale existuje několik výjimek.

Tento tutoriál poskytuje podrobný návod, jak používat RAISERROR ve spojení s TRY...CATCH. Autor používá příklad ukazující, jak použít RAISERROR uvnitř bloku TRY, aby spuštění skočilo na přidružený blok CATCH. Uvnitř bloku CATCH autor ukazuje, jak použít RAISERROR k vrácení informací o chybě, které vyvolaly blok CATCH. Výstup zobrazuje ID zprávy, úroveň závažnosti a chybový stav.

RAISERROR vs. THROW prohlášení o zpracování chyb

RAISERROR byl představen v SQL Server 7.0 a byl efektivním způsobem řešení chyb T-SQL po mnoho let. Pokud ale vyvíjíte nové aplikace, Microsoft nyní doporučuje používat příkazy THROW namísto RAISERROR.

Jak organizace aktualizují na SQL Server 2012 a vyšší, RAISERROR se postupně vyřazuje. Ve skutečnosti RAISERROR nelze použít v nativně zkompilovaných uložených procedurách SQL Server 2014. THROW je považováno za vylepšení oproti RAISERROR, protože se snáze používá.

Dokumentace Microsoft SQL Server rozebírá rozdíly mezi příkazy RAISERROR a THROW zpracování chyb následovně:

prohlášení RAISERROR

  • Pokud je msg_id předáno RAISERROR, musí být ID definováno v sys.messages.
  • Parametr msg_str může obsahovat styly formátování printf.

Parametr závažnosti určuje závažnost výjimky.

příkaz THROW

  • Parametr error_number nemusí být definován v sys.messages.
  • Parametr zprávy nepřijímá formátování stylu printf.
  • Neexistuje žádný parametr závažnosti. Závažnost výjimky je vždy nastavena na 16.

Přestože dny RAISERROR mohou být sečteny, zůstává životaschopnou možností zpracování chyb na starších verzích SQL Server. Společnost Microsoft nutí uživatele novějších verzí SQL Server (SQL SERVER 2012 a vyšší), aby k implementaci zpracování chyb používali příkaz THROW namísto RAISERROR. Microsoft ještě neoznámil ukončení podpory RAISERROR, ale zdá se pravděpodobné, že to bude spíše dříve než později.


  1. Jak nastavit cílový adresář archivních protokolů v databázi Oracle

  2. Oracle vybere nejnovější záznam data

  3. Jak vložit C# List do databáze pomocí Dapper.NET

  4. percentily z dat histogramu