Добавить TRY..CATCH
Обработка ошибок:
В следующем примере показано, как ошибка разрешения имени объекта, сгенерированная инструкцией SELECT, не перехватывается конструкцией TRY… CATCH, но перехватывается блоком CATCH, когда тот же оператор SELECT выполняется внутри хранимой процедуры.
BEGIN TRY
-- Table does not exist; object name resolution
-- error not caught.
SELECT * FROM NonexistentTable;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() as ErrorNumber,
ERROR_MESSAGE() as ErrorMessage;
END CATCH
Ошибка не обнаружена, и управление переходит из конструкции TRY… CATCH на следующий более высокий уровень.
Выполнение инструкции SELECT внутри хранимой процедуры приведет к возникновению ошибки на уровне ниже, чем блок TRY. Ошибка будет обработана конструкцией TRY… CATCH.
-- Verify that the stored procedure does not exist.
IF OBJECT_ID ( N'usp_ExampleProc', N'P' ) IS NOT NULL
DROP PROCEDURE usp_ExampleProc;
GO
-- Create a stored procedure that will cause an
-- object resolution error.
CREATE PROCEDURE usp_ExampleProc
AS
SELECT * FROM NonexistentTable;
GO
BEGIN TRY
EXECUTE usp_ExampleProc
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() as ErrorNumber,
ERROR_MESSAGE() as ErrorMessage;
END CATCH;