Използване на TRY / CATCH за обработка на грешки в SQL Server

click fraud protection

Операторът TRY / CATCH в Transact-SQL открива и обработва състояния на грешки в приложения за бази данни. Това твърдение е крайъгълният камък на SQL Обработката на грешки в сървъра и е важна част от разработването на стабилни приложения за бази данни.

TRY / CATCH се прилага за SQL Server, започвайки с 2008 г., Azure SQL база данни, Azure SQL Data Warehouse и Parallel Data Warehouse.

Представяме TRY / CATCH

TRY./CATCH работи, като посочва два Transact-SQL израза: един, който искате да "опитате", а друг да използвате, за да "уловите" евентуални грешки. Когато SQL Server срещне оператор TRY / CATCH, той незабавно изпълнява израза, включен в клаузата TRY. Ако операторът TRY се изпълни успешно, SQL Server продължава. Ако обаче инструкцията TRY генерира грешка, SQL Server изпълнява инструкцията CATCH, за да обработи грешката елегантно.

Основният синтаксис приема тази форма:

НАЧАЛО ОПИТАЙТЕ
{sql_statement | извлечение блок}
КРАЙ ОПИТ
НАЧАЛО УЛОВ
[{sql_statement | statement_block}]
Краен улов
[; ]
instagram viewer

ПРИМЕР / ПРИЕМ Пример

Помислете за база данни за човешки ресурси, която съдържа таблица с име служители, който съдържа информация за всеки един от служителите във фирма. Тази таблица използва цяло число идентификационен номер на служител като първичен ключ.

Можете да опитате да използвате изявлението по-долу, за да вмъкнете нов служител във вашата база данни:

INSERT INTO служители (id, first_name, last_name, extension)
ЦЕННОСТИ (12497, „Майк“, „Чапъл“, 4201)

При нормални обстоятелства това изявление ще добави ред към таблицата на служителите. Ако обаче служител с ID 12497 вече съществува в базата данни, вмъкването на реда би нарушило ограничението на първичния ключ и ще доведе до следната грешка:

Съобщение 2627, ниво 14, състояние 1, ред 1
Нарушение на ПРИМАРЕН КЛЮЧ ограничение 'PK_employee_id'. Не може да се вмъкне дублиран ключ в обект 'dbo.employees'.
Изявлението е прекратено.

Въпреки че тази грешка ви предоставя информацията, необходима ви за отстраняване на проблема, има два проблема с нея. Първо, съобщението е загадъчно. Той включва кодове за грешки, номера на редове и друга информация, която е неразбираема за обикновения потребител. Второ и по-важното е, че това води до прекратяване на изявлението и може да доведе до срив на приложението.

Алтернативата е да обгърнете изявлението в TRY... CATCH израз, както е показано тук:

НАЧАЛО ОПИТАЙТЕ
INSERT INTO служители (id, first_name, last_name, extension)
ЦЕННОСТИ (12497, „Майк“, „Чапъл“, 4201)
КРАЙ ОПИТ
НАЧАЛО УЛОВ
ПЕЧАТ 'ГРЕШКА:' + ГРЕШКА_СЪОБЩЕНИЕ ();
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Поща на служител',
@recipients = '[email protected]',
@body = 'Възникна грешка при създаването на нов запис на служител.',
@subject = 'Грешка в базата данни на служителите';
Краен улов

В този пример всички възникнали грешки се докладват както на потребителя, изпълняващ командата, така и на имейл адреса на [email protected]. Грешката, показана на потребителя, е:

Грешка: Нарушение на ПРИМАРЕН КЛЮЧ ограничение 'PK_employee_id'. 
Не може да се вмъкне дублиран ключ в обект 'dbo.employees'.
Пощата на опашката.

Изпълнението на приложението продължава нормално, което позволява на програмиста да се справи с грешката. Използването на изявлението TRY / CATCH е елегантен начин за активно откриване и обработка на грешки, възникващи в приложения на база данни на SQL Server.

Научете повече

За да научите повече за езика на структурираните заявки, вижте нашата статия Основи на SQL.

instagram story viewer