@@ERROR (T-SQL)
Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse di Microsoft Fabric
Mengembalikan nomor kesalahan untuk pernyataan Transact-SQL terakhir yang dijalankan.
Sintaks
@@ERROR
Jenis Kembalian
Integer
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, maka @@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. COBA... 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. COBA... 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
J. Menggunakan @@ERROR untuk mendeteksi kesalahan tertentu
Contoh berikut menggunakan @@ERROR
untuk memeriksa pelanggaran batasan pemeriksaan (kesalahan #547) dalam pernyataan UPDATE
.
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. 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 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. 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 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
Lihat Juga
COBA... CATCH (Transact-SQL)
ERROR_LINE (T-SQL)
ERROR_MESSAGE (T-SQL)
ERROR_NUMBER (T-SQL)
ERROR_PROCEDURE (T-SQL)
ERROR_SEVERITY (T-SQL)
ERROR_STATE (T-SQL)
@@ROWCOUNT (T-SQL)
sys.messages (Transact-SQL)
Referensi Kesalahan dan Peristiwa (Mesin Database)