Anasayfa / Yazılım / SQL / @@ERROR Ne İşe Yarar?

@@ERROR Ne İşe Yarar?

MS SQL’de hataları yakalayabilmenin yollarından birisi @@ERROR fonksiyonunu kullanmaktır. @@ERROR fonksiyonu eğer bir SQL sorgusunda hata var ise geriye sıfırdan büyük bir değer döndürür. Dolayısı ile bu fonksiyonu kullanırken aynı zamanda bir global değişken de kullanmamız gerekir. Örnekler ile yazımıza devam edelim.

DECLARE @HataNumarasi INT;
PRINT 3/0;
SET @HataNumarasi = @@ERROR;
IF @HataNumarasi > 0 BEGIN
PRINT 'Bir hata meydana geldi.' 
PRINT @HataNumarasi;
PRINT @@ERROR;
END;

Bu kodda öncelikle HataNumarasi adında bir INT tipinde değişken tanımlıyorum. Daha sonra Örnek olarak 3/0 işleminin sonucunu yazdırmak istiyorum. Ancak bu sonuç hatalı çıkacak bunu biliyorum çünkü herhangi bir sayı 0’a bölünemez. Dolayısı ile oluşturmuş olduğumuz HataNumarasi değişkenine hata kontrol fonksiyonumu atadım, @@ERROR ile eşitledim yani. Bu fonksiyon sonucu eğer hata var ise geriye 0’dan büyük bir değer döner, bunu IF ile kontrol ediyorum ve geriye dönen değer hatanın numarası oluyor ve bunu da ekrana yazdırıyorum. Sonuç aşağıdaki gibi:

2013121701

Şimdi de olmayan bir tablo üzerinde tablo silme işlemi yapıp, bunun hata kodunu ekrana yazdıralım.

DECLARE @HataNumarasi INT;
DROP TABLE OlmayanTablo;
SET @HataNumarasi = @@ERROR;
IF @HataNumarasi > 0 BEGIN
PRINT 'Bir hata meydana geldi'
PRINT @HataNumarasi;
PRINT @@ERROR;
END;

Üstteki örneğimdeki açıklama ile tamamen aynı diyebiliriz, sadece burada tablo silme işlemi yaptık. OlmayanTablo adında henüz oluşturulmamış bir tabloyu silmeye çalıştım ve dolayısı ile hata aldım. Bunun hata numarasını da ekrana yazdırdım.

2013121702

Son örneğimizi de AdventureWorks2012 veritabanı üzerinde yapalım.

DECLARE @HataNumarasi INT;
SET IDENTITY_INSERT Person.ContactType ON;
INSERT INTO Person.ContactType(ContactTypeID,Name,ModifiedDate)
VALUES (1,'Accounting Manager', GETDATE());
SET @HataNumarasi = @@ERROR;
IF @HataNumarasi > 0 BEGIN
PRINT 'Bir hata meydana geldi';
PRINT @HataNumarasi;
END;

Yine HataNumarasi adında INT tipinde bir değişken oluşturdum. Bu sefer Person.ContactType tablosuna veri eklemeye çalışıyorum. Ancak birincil anahtar alanında hata alıyorum, çünkü aynı tipte veri daha önceden ilgili tabloda mevcut. İşte bu seferde bu hata numarasını yazdırıyorum.

DECLARE @HataNumarasi INT;
SET IDENTITY_INSERT Person.ContactType ON;
INSERT INTO Person.ContactType(ContactTypeID,Name,ModifiedDate)
VALUES (1,'Accounting Manager', GETDATE());
SET @HataNumarasi = @@ERROR;
IF @HataNumarasi > 0 BEGIN
PRINT 'Bir hata meydana geldi';
PRINT @HataNumarasi;
END;

2013121703

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir