Aracılığıyla paylaş


ERROR_PROCEDURE (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

Bu işlev, bir yapı bloğunun yürütülmesine neden olursa hatanın oluştuğu saklı yordamın veya tetikleyicinin CATCHTRY...CATCH adını döndürür.

  • SQL Server 2017 (14.x) ve sonraki sürümleri döndür schema_name.stored_procedure_name
  • SQL Server 2016 (13.x) ve Azure SQL Veritabanı dönüşü stored_procedure_name

Transact-SQL söz dizimi kuralları

Sözdizimi

ERROR_PROCEDURE ( )

Dönüş türleri

nvarchar(128)

Dönüş değeri

Bir CATCH blokta çağrıldığında, ERROR_PROCEDURE hatanın kaynaklandığı saklı yordamın veya tetikleyicinin adını döndürür.

ERROR_PROCEDURE , hatanın saklı yordamda veya tetikleyicide oluşmadığını döndürür NULL .

ERROR_PROCEDUREbir NULL bloğun kapsamı dışında çağrıldığında döndürürCATCH.

Açıklamalar

ERROR_PROCEDURE blok kapsamındaki her yerde çağrıları CATCH destekler.

ERROR_PROCEDURE blok kapsamında kaç kez çalıştığından veya nerede çalıştığından bağımsız olarak bir hatanın oluştuğu saklı yordamın veya tetikleyicinin CATCH adını döndürür. Bu sonuç, yalnızca hataya neden olanın hemen ardından deyiminde hata numarası döndüren gibi @@ERRORbir işlevle karşıttır.

Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)

A. CATCH bloğunda ERROR_PROCEDURE kullanma

Bu örnekte, sıfıra bölme hatası oluşturan saklı bir yordam gösterilmektedir. ERROR_PROCEDURE hatanın oluştuğu saklı yordamın adını döndürür.

-- 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

Sonuç kümesi aşağıdadır.

-----------

(0 row(s) affected)

ErrorProcedure
--------------------
usp_ExampleProc

(1 row(s) affected)

B. Catch bloğunda diğer hata işleme araçlarıyla ERROR_PROCEDURE kullanma

Bu örnekte, sıfıra bölme hatası oluşturan saklı bir yordam gösterilmektedir. Saklı yordam, hatanın oluştuğu saklı yordamın adıyla birlikte hata hakkındaki bilgileri döndürür.

-- 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

Sonuç kümesi aşağıdadır.

-----------

(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)