SQL Server Hatalarını İşlemek için TRY/CATCH Kullanma

Transact-SQL'deki TRY/CATCH ifadesi, veritabanı uygulamalarındaki hata koşullarını algılar ve işler. Bu açıklamanın temel taşı SQL Sunucu hata işleme ve sağlam veritabanı uygulamaları geliştirmenin önemli bir parçasıdır.

TRY/CATCH, 2008'den itibaren SQL Server, Azure SQL Veritabanı, Azure SQL Veri Ambarı ve Paralel Veri Ambarı için geçerlidir.

TR/CATCH ile tanışın

TRY./CATCH, iki Transact-SQL ifadesi belirterek çalışır: biri "denemek" istediğiniz, diğeri ise ortaya çıkabilecek hataları "yakalamak" için kullanmak. SQL Server bir TRY/CATCH deyimiyle karşılaştığında, TRY deyiminde yer alan deyimi hemen yürütür. TRY ifadesi başarılı bir şekilde yürütülürse, SQL Server devam eder. Ancak, TRY deyimi bir hata üretirse, SQL Server hatayı düzgün bir şekilde işlemek için CATCH deyimini yürütür.

Temel sözdizimi şu şekli alır:

BAŞLAYIN DENEYİN
{ sql_ifadesi | ifade bloğu }
BİTİR
YAKALAMAYA BAŞLA
[ { sql_ifadesi | deyim_block } ]
SON YAKALAMA
[; ]

DENEYİN/YAKALAMA Örneği

adlı bir tablo içeren bir insan kaynakları veritabanını düşünün.

instagram viewer
çalışanlar, bir şirketteki çalışanların her biri hakkında bilgi içerir. Bu tablo, bir tamsayı çalışan kimlik numarası kullanır. birincil anahtar.

Veritabanınıza yeni bir çalışan eklemek için aşağıdaki ifadeyi kullanmayı deneyebilirsiniz:

INSERT INTO çalışanları (kimlik, ad, soyadı, uzantı)
DEĞERLER(12497, 'Mike', 'Chapple', 4201)

Normal koşullar altında, bu ifade Çalışanlar tablosuna bir satır ekler. Ancak, veritabanında kimliği 12497 olan bir çalışan zaten varsa, satırı eklemek birincil anahtar kısıtlamasını ihlal eder ve aşağıdaki hatayla sonuçlanır:

Mesaj 2627, Seviye 14, Durum 1, Satır 1
BİRİNCİL ANAHTAR kısıtlaması 'PK_employee_id' ihlali. 'dbo.employees' nesnesine yinelenen anahtar eklenemiyor.
Açıklama sonlandırıldı.

Bu hata, sorunu gidermek için ihtiyacınız olan bilgileri sağlarken, bununla ilgili iki sorun vardır. İlk olarak, mesaj şifrelidir. Ortalama bir kullanıcı tarafından anlaşılmayan hata kodları, satır numaraları ve diğer bilgileri içerir. İkincisi ve daha da önemlisi, ifadenin iptal edilmesine ve uygulamanın çökmesine neden olabilir.

Alternatif, ifadeyi burada gösterildiği gibi bir TRY…CATCH ifadesine sarmaktır:

BAŞLAYIN DENEYİN
INSERT INTO çalışanları( kimlik, ad, soyadı, uzantı)
DEĞERLER(12497, 'Mike', 'Chapple', 4201)
BİTİR
YAKALAMAYA BAŞLA
YAZDIR 'HATA:' + HATA_MESAJ( );
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Çalışan Postası',
@alıcılar = '[email protected]',
@body = 'Yeni bir çalışan kaydı oluşturulurken bir hata oluştu.',
@subject = 'Çalışan Veritabanı Hatası';
SON YAKALAMA

Bu örnekte, oluşan hatalar hem komutu yürüten kullanıcıya hem de [email protected] e-posta adresine bildirilir. Kullanıcıya gösterilen hata:

Hata: BİRİNCİL ANAHTAR kısıtlaması 'PK_employee_id' ihlali. 
'dbo.employees' nesnesine yinelenen anahtar eklenemiyor.
Posta sıraya alındı.

Uygulama yürütmesi, programcının hatayı işlemesine izin vererek normal şekilde devam eder. TRY/CATCH ifadesinin kullanılması, SQL Server veritabanı uygulamalarında oluşan hataları proaktif olarak algılamanın ve işlemenin zarif bir yoludur.

Daha Fazlasını Öğrenmek

Yapılandırılmış Sorgu Dili hakkında daha fazla bilgi edinmek için makalemize göz atın SQL'in Temelleri.

instagram story viewer