@@ERROR (T-SQL)

Berlaku untuk: SQL Server (semua versi yang didukung) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Mengembalikan nomor kesalahan untuk pernyataan Transact-SQL terakhir yang dijalankan.

tautan topikIkon Konvensi Sintaks Transact-SQL

Sintaks

@@ERROR  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.

Jenis Pengembalian

bilangan bulat

Keterangan

Mengembalikan 0 jika pernyataan Transact-SQL sebelumnya tidak mengalami kesalahan.

Mengembalikan nomor kesalahan jika pernyataan sebelumnya mengalami kesalahan. Jika kesalahan adalah salah satu kesalahan dalam tampilan katalog sys.messages, @@ERROR berisi nilai dari kolom sys.messages.message_id untuk kesalahan tersebut. Anda dapat melihat teks yang terkait dengan nomor kesalahan @@ERROR di sys.messages.

Karena @@ERROR dibersihkan dan diatur ulang pada setiap pernyataan yang dijalankan, periksa segera setelah pernyataan diverifikasi, atau simpan ke variabel lokal yang dapat diperiksa nanti.

Gunakan TRY... Konstruksi CATCH untuk menangani kesalahan. PERCOBAAN... Konstruksi CATCH juga mendukung fungsi sistem tambahan (ERROR_LINE, ERROR_MESSAGE, ERROR_PROCEDURE, ERROR_SEVERITY, dan ERROR_STATE) yang mengembalikan lebih banyak informasi kesalahan daripada @@ERROR. Mencoba... CATCH juga mendukung fungsi ERROR_NUMBER yang tidak terbatas pada mengembalikan nomor kesalahan dalam pernyataan segera setelah pernyataan yang menghasilkan kesalahan. Untuk informasi selengkapnya, lihat TRY... CATCH (Transact-SQL).

Contoh

A. Menggunakan @@ERROR untuk mendeteksi kesalahan tertentu

Contoh berikut menggunakan @@ERROR untuk memeriksa pelanggaran batasan pemeriksaan (kesalahan #547) dalam pernyataan UPDATE .

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

B. Menggunakan @@ERROR untuk keluar dari prosedur secara kondisional

Contoh berikut menggunakan IF...ELSE pernyataan untuk menguji @@ERROR setelah DELETE pernyataan dalam prosedur tersimpan. Nilai @@ERROR variabel menentukan kode pengembalian yang dikirim ke program panggilan, menunjukkan keberhasilan atau kegagalan prosedur.

USE AdventureWorks2012;  
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. Menggunakan @@ERROR dengan @@ROWCOUNT

Contoh berikut menggunakan @@ERROR dengan @@ROWCOUNT untuk memvalidasi operasi UPDATE pernyataan. Nilai @@ERROR diperiksa untuk setiap indikasi kesalahan, dan @@ROWCOUNT digunakan untuk memastikan bahwa pembaruan berhasil diterapkan ke baris dalam tabel.

USE AdventureWorks2012;  
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  

Lihat juga

Mencoba... CATCH (Transact-SQL)
ERROR_LINE (T-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (T-SQL)
ERROR_PROCEDURE (T-SQL)
ERROR_SEVERITY (T-SQL)
ERROR_STATE (T-SQL)
@@ROWCOUNT (T-SQL)
sys.messages (Transact-SQL)
Kesalahan dan Referensi Peristiwa (Mesin Database)