ERROR_PROCEDURE (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в Microsoft Fabric
Эта функция возвращает имя хранимой процедуры или триггера, в которых произошла ошибка, вызвавшая выполнение блока CATCH конструкции TRY…CATCH.
- SQL Server 2017 с возвратом текущей версии
schema_name.stored_procedure_name
- Возвращается SQL Server 2016
stored_procedure_name
Соглашения о синтаксисе Transact-SQL
Синтаксис
ERROR_PROCEDURE ( )
Типы возвращаемых данных
nvarchar(128)
Возвращаемое значение
При вызове в блоке CATCH ERROR_PROCEDURE
возвращает имя хранимой процедуры или триггера, в которых произошла ошибка.
Функция ERROR_PROCEDURE
возвращает значение NULL, если внутри хранимой процедуры или триггера не произошла ошибка.
Функция ERROR_PROCEDURE
возвращает значение NULL в случае вызова вне блока CATCH.
Замечания
Функцию ERROR_PROCEDURE
можно вызывать в любом месте области действия блока CATCH.
Функция ERROR_PROCEDURE
возвращает имя хранимой процедуры или триггера, в которых произошла ошибка, независимо от числа вызовов функции или места ее вызова в области действия блока CATCH
. В этом ее отличие от таких функций, как @@ERROR, которые возвращают номер ошибки только в той инструкции, которая непосредственно следует за инструкцией, вызвавшей ошибку.
Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)
А. Использование функции ERROR_PROCEDURE в блоке CATCH
В приведенном ниже примере показана хранимая процедура, которая создает ошибку деления на 0. Функция ERROR_PROCEDURE
возвращает имя хранимой процедуры, в которой произошла ошибка.
-- Verify that the stored procedure does not already exist.
IF OBJECT_ID ( 'usp_ExampleProc', 'P' ) IS NOT NULL
DROP PROCEDURE usp_ExampleProc;
GO
-- Create a stored procedure that
-- generates a divide-by-zero error.
CREATE PROCEDURE usp_ExampleProc
AS
SELECT 1/0;
GO
BEGIN TRY
-- Execute the stored procedure inside the TRY block.
EXECUTE usp_ExampleProc;
END TRY
BEGIN CATCH
SELECT ERROR_PROCEDURE() AS ErrorProcedure;
END CATCH;
GO
Вот результирующий набор.
-----------
(0 row(s) affected)
ErrorProcedure
--------------------
usp_ExampleProc
(1 row(s) affected)
B. Использование функции ERROR_PROCEDURE в блоке CATCH вместе с другими средствами обработки ошибок
В приведенном ниже примере показана хранимая процедура, которая создает ошибку деления на 0. Наряду с именем хранимой процедуры, в которой произошла ошибка, возвращаются сведения об ошибке.
-- Verify that the stored procedure does not already exist.
IF OBJECT_ID ( 'usp_ExampleProc', 'P' ) IS NOT NULL
DROP PROCEDURE usp_ExampleProc;
GO
-- Create a stored procedure that
-- generates a divide-by-zero error.
CREATE PROCEDURE usp_ExampleProc
AS
SELECT 1/0;
GO
BEGIN TRY
-- Execute the stored procedure inside the TRY block.
EXECUTE usp_ExampleProc;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_MESSAGE() AS ErrorMessage,
ERROR_LINE() AS ErrorLine;
END CATCH;
GO
Вот результирующий набор.
-----------
(0 row(s) affected)
ErrorNumber ErrorSeverity ErrorState ErrorProcedure ErrorMessage ErrorLine
----------- ------------- ----------- ---------------- ---------------------------------- -----------
8134 16 1 usp_ExampleProc Divide by zero error encountered. 6
(1 row(s) affected)
См. также
sys.messages (Transact-SQL)
ПОПЫТКА... CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)