Anda mungkin ingin mulai menggunakan COBA..CATCH blokir dalam prosedur Anda
Jadi prosedur Anda dapat ditulis ulang sebagai:
CREATE PROCEDURE spTest_Delete @ID INT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRANSACTION
DELETE
FROM Test
WHERE ID = @ID;
COMMIT TRANSACTION
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
SELECT ERROR_NUMBER(), ERROR_MESSAGE();
END CATCH
END
Juga, harap perhatikan bahwa Anda menjalankan sebagai pernyataan penghapusan tunggal. Artinya tidak perlu dibungkus dalam suatu transaksi. Ini pertanyaan menjelaskan alasannya.
Kode Anda menjadi ini:
CREATE PROCEDURE spTest_Delete @ID INT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
DELETE
FROM Test
WHERE ID = @ID;
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER(), ERROR_MESSAGE();
END CATCH
END
Sekarang mengapa @errMessage
Anda selalu NULL? Karena ERROR_MESSAGE()
berlaku HANYA DI CATCH BLOCK. Itu tertulis di dokumentasi
:
Menggunakan TRY..CATCH di Transact-SQL mengatakan ini: