Извлечението TRY … CATCH в Transact-SQL открива и обработва условия за грешки в приложенията на базата данни. Това твърдение е крайъгълният камък на обработката на SQL Server грешки и е важна част от разработването на надеждни приложения за бази данни. TRY … CATCH се прилага за SQL Server, като се започне от 2008 г., Azure SQL Database, Azure SQL Data Warehouse и Parallel Data Warehouse.
Въвеждане на TRY … УЛОВ
TRY … CATCH работи, като ви позволява да зададете два Transact-SQL израза: този, който искате да "опитате", а друг - да "улови" грешките, които могат да възникнат. Когато SQL Server срещне инструкция TRY … CATCH, той незабавно изпълнява изявлението, включено в клаузата TRY. Ако операторът TRY изпълнява успешно, SQL Server се премества. Ако обаче инструкцията TRY генерира грешка, SQL Server изпълнява оператора CATCH, за да се справи грациозно с грешката.
Основният синтаксис има тази форма:
Започнете да пробвате отчет блок END TRYНАЧАЛО УЛОВsql_statementКРАЙ НА УЛОВ ; Лесно е да се разбере използването на това изявление чрез пример. Представете си, че сте администратор на база данни за човешки ресурси, която съдържа таблица "Служители", която съдържа информация за всеки от служителите във вашата организация. В тази таблица се използва идентификационен номер на служител с цялото число като първичен ключ. Може да опитате да използвате изявлението по-долу, за да вмъкнете нов служител във вашата база данни: ВЪВЕЖДАНЕ В СЛУЖИТЕЛИТЕ (id, first_name, last_name, extension)VALUES (12497, "Майк", "Чапли", 4201)
При нормални обстоятелства това изявление би добавило ред към таблицата "Служители". Ако обаче служител с ID 12497 вече съществува в базата данни, вмъкването на реда би нарушило ограничението на основния ключ и доведе до следната грешка: Msg 2627, Ниво 14, Състояние 1, Линия 1Нарушение на ограничението за "PRIMARY KEY" PK_employee_id. Не може да се вмъкне дублиращ се ключ в обект 'dbo.employees'.Изявлението е прекратено.
Въпреки че тази грешка ви предоставя информацията, необходима за отстраняване на проблема, има два проблема. Първо, съобщението е загадъчно. Той включва кодове за грешки, номера на линии и друга информация, която е неразбираема за средния потребител. Второ, и по-важното, това кара декларацията да прекъсне и да причини катастрофа на приложението.Алтернативата е да увиете изявлението в изявление TRY … CATCH, както е показано тук: Започнете да пробватеВЪВЕЖДАНЕ В СЛУЖИТЕЛИТЕ (id, first_name, last_name, extension)VALUES (12497, "Майк", "Чапли", 4201)END TRYНАЧАЛО УЛОВPRINT "ГРЕШКА:" + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Mail на служител',@recipients = '[email protected]',@body = 'Възникна грешка при създаването на нов запис на служителите.',@subject = 'Грешка при дублиране на служител';КРАЙ НА УЛОВ
В този пример всички грешки, които се появяват, се съобщават както на потребителя, изпълняващ командата, така и на имейл адреса на [email protected]. Грешката, показана на потребителя, е: Грешка: Нарушаване на ограничението за PRIMARY KEY "PK_employee_id". Не може да се вмъкне дублиращ се ключ в обект 'dbo.employees'.Поща в опашката.
Изпълнението на приложенията продължава нормално, което позволява на програмиста да се справи с грешката. Използването на инструмента TRY … CATCH е елегантен начин за проактивно откриване и обработка на грешки, които се появяват в приложения на SQL Server Database. Ако искате да научите повече за езика за структурирани заявки, разгледайте Въведение в SQL. TRY … Пример за улов
Научете повече