SQL Server (TRY…CATCH)

TRY…CATCH ile SQL Server’da Error Handling (Hata Ayıklama)
ERROR_LINE(): hatanın olduğu satır numarası
ERROR_MESSAGE(): hata mesajının tam hali
ERROR_PROCEDURE(): hatanın oluştuğu yordam
ERROR_NUMBER(): hata numarası
ERROR_SEVERITY(): hatanın kritiklik seviyesi
ERROR_STATE(): hatanın durum numarası

BEGIN TRY
  DECLARE @Sayi int = 5/0
END TRY
BEGIN CATCH
  SELECT
   ERROR_NUMBER()    AS ErrNumber,
   ERROR_SEVERITY()  AS ErrSeverity,
   ERROR_STATE()     AS ErrState,
   ERROR_PROCEDURE() AS ErrProc,
   ERROR_LINE()      AS ErrLine,
   ERROR_MESSAGE()   AS ErrMessage
END CATCH

CREATE PROCEDURE dbo.TestError3
AS
BEGIN
DECLARE @e INT;
SELECT @e = 0;
BEGIN TRY
INSERT INTO Person.Address (AddressID)
VALUES (1);
END TRY
BEGIN CATCH
SELECT @e = ERROR_NUMBER();
PRINT N’Error Code = ‘ + CAST(@e AS NVARCHAR(10));
PRINT N’Error Procedure = ‘ + ERROR_PROCEDURE();
PRINT N’Error Message = ‘ + ERROR_MESSAGE();
END CATCH
RETURN @e;
END

GO

DECLARE @ret INT;
EXEC @ret = dbo.TestError3;
PRINT N’Return value = ‘ + CAST(@ret AS NVARCHAR(10));

MSSQL try catch ve Transaction kullanımı

Transaction, özet olarak daha küçük parçalara ayrılamayan işlem demektir. Özellike bir grup işlemin arka arkaya gerçekleşiyor olmasına rağmen, seri işlemler halinde ele alınması gerktiğinde kullanılır. Transaction bloğu içerisindeki işlemlerin tamamı gerçekleşinceye kadar hepsi gerçekleşmemiş varsayılır.

USE Deneme
BEGIN TRY
BEGIN TRAN
UPDATE dbo.Hesap SET Bakiye-=100 WHERE TCKimlikNo='23456789101'
RAISERROR('Elektrikler Kesildi',16,2)
UPDATE dbo.Hesap SET Bakiye+=100 WHERE TCKimlikNo='12345678910'
COMMIT TRAN
END TRY
BEGIN CATCH
PRINT 'Beklenmedik bir hata olustu'
ROLLBACK TRAN
END CATCH