Aracılığıyla paylaş


@@ERROR (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ı

Son Transact-SQL ifadesi için hata numarasını döndürür.

Transact-SQL söz dizimi kuralları

Sözdizimi

@@ERROR  

Dönüş Türleri

tamsayı

Açıklamalar

Önceki Transact-SQL ifadesinde hata bulunmadıysa 0 döner.

Önceki ifadede hata bulunursa hata numarası döndürür. Hata sys.messages katalog görünümündeki hatalardan biriyse, @@ERROR o hata için sys.messages.message_id sütunundaki değeri içerir. @@ERROR hata numarasıyla ilişkili metni sys.messages içinde görebilirsiniz.

Her ifadede @@ERROR temizlenip sıfırlandığı için, doğrulama yapıldıktan hemen sonra kontrol edin veya daha sonra kontrol edilebilecek yerel bir değişkene kaydedin.

Use the TRY... Hataları yönetmek için CATCH yapısı. DENEME... CATCH yapısı ayrıca @@ERROR'den daha fazla hata bilgisi döndüren ek sistem fonksiyonlarını (ERROR_LINE, ERROR_MESSAGE, ERROR_PROCEDURE, ERROR_SEVERITY ve ERROR_STATE) destekler. DENEMEK... CATCH ayrıca, hata oluşturan ifadeden hemen sonra ifadedeki hata numarasını döndürmekle sınırlı olmayan bir ERROR_NUMBER fonksiyonunu destekler. Daha fazla bilgi için bkz. TRY... CATCH (Transact-SQL).

Örnekler

A. Belirli bir hatayı tespit etmek için @@ERROR kullanmak

Aşağıdaki örnek @@ERROR , bir UPDATE ifadede kontrol kısıtlama ihlali (hata #547) için kullanılır.

USE AdventureWorks2022;  
GO  
UPDATE HumanResources.EmployeePayHistory  
    SET PayFrequency = 4  
    WHERE BusinessEntityID = 1;  
IF @@ERROR = 547
    BEGIN
    PRINT N'A check constraint violation occurred.';
    END
GO  

B. Bir prosedürden koşullu çıkmak için @@ERROR kullanmak

Aşağıdaki örnek, bir ifadeyi depolanmış bir prosedürde test @@ERRORDELETE etmek için ifadeler kullanırIF...ELSE. Değişkenin @@ERROR değeri, çağıran programa gönderilen dönüş kodunu belirler ve işlemin başarısını veya başarısızlığını gösterir.

USE AdventureWorks2022;  
GO  
-- Drop the procedure if it already exists.  
IF OBJECT_ID(N'HumanResources.usp_DeleteCandidate', N'P') IS NOT NULL  
    DROP PROCEDURE HumanResources.usp_DeleteCandidate;  
GO  
-- Create the procedure.  
CREATE PROCEDURE HumanResources.usp_DeleteCandidate   
    (  
    @CandidateID INT  
    )  
AS  
-- Execute the DELETE statement.  
DELETE FROM HumanResources.JobCandidate  
    WHERE JobCandidateID = @CandidateID;  
-- Test the error value.  
IF @@ERROR <> 0   
    BEGIN  
        -- Return 99 to the calling program to indicate failure.  
        PRINT N'An error occurred deleting the candidate information.';  
        RETURN 99;  
    END  
ELSE  
    BEGIN  
        -- Return 0 to the calling program to indicate success.  
        PRINT N'The job candidate has been deleted.';  
        RETURN 0;  
    END;  
GO  

C. @@ERROR @@ROWCOUNT

Aşağıdaki örnek, bir UPDATE ifadenin işleyişini doğrulamak için ile @@ROWCOUNT kullanılır@@ERROR. Değeri @@ERROR , hata göstergesi için kontrol edilir ve @@ROWCOUNT güncellemenin tablodaki bir satıra başarılı şekilde uygulandığından emin olmak için kullanılır.

USE AdventureWorks2022;  
GO  
IF OBJECT_ID(N'Purchasing.usp_ChangePurchaseOrderHeader',N'P')IS NOT NULL  
    DROP PROCEDURE Purchasing.usp_ChangePurchaseOrderHeader;  
GO  
CREATE PROCEDURE Purchasing.usp_ChangePurchaseOrderHeader  
    (  
    @PurchaseOrderID INT  
    ,@BusinessEntityID INT  
   )  
AS  
-- Declare variables used in error checking.  
DECLARE @ErrorVar INT;  
DECLARE @RowCountVar INT;  
  
-- Execute the UPDATE statement.  
UPDATE PurchaseOrderHeader   
    SET BusinessEntityID = @BusinessEntityID   
    WHERE PurchaseOrderID = @PurchaseOrderID;  
  
-- Save the @@ERROR and @@ROWCOUNT values in local   
-- variables before they are cleared.  
SELECT @ErrorVar = @@ERROR  
    ,@RowCountVar = @@ROWCOUNT;  
  
-- Check for errors. If an invalid @BusinessEntityID was specified,  
-- the UPDATE statement returns a foreign key violation error #547.  
IF @ErrorVar <> 0  
    BEGIN  
        IF @ErrorVar = 547  
            BEGIN  
                PRINT N'ERROR: Invalid ID specified for new employee.';  
                 RETURN 1;  
            END  
        ELSE  
            BEGIN  
                PRINT N'ERROR: error '  
                    + RTRIM(CAST(@ErrorVar AS NVARCHAR(10)))  
                    + N' occurred.';  
                RETURN 2;  
            END  
    END  
  
-- Check the row count. @RowCountVar is set to 0   
-- if an invalid @PurchaseOrderID was specified.  
IF @RowCountVar = 0  
    BEGIN  
        PRINT 'Warning: The BusinessEntityID specified is not valid';  
        RETURN 1;  
    END  
ELSE  
    BEGIN  
        PRINT 'Purchase order updated with the new employee';  
        RETURN 0;  
    END;  
GO  

Ayrıca Bkz.

DENEYIN... CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
HATA_DURUMU (Transact-SQL)
@@ROWCOUNT (Transact-SQL)
sys.messages (Transact-SQL)
Hatalar ve Olaylar Başvurusu (Veritabanı Motoru)