TRY istifadə üçün bir addım-addım təlimat ... SQL Server səhvləri idarə etmək üçün CATCH

İcra etməyi kəsmədən səhvləri müəyyənləşdirin

TRY ... Transact- SQL- də CATCH ifadəsi verilənlər bazası tətbiqlərinizdə səhv şərtləri algılar və işləyir. Bu bəyanat SQL Server səhvinin əsas təməlidir və güclü verilənlər bazası proqramlarının inkişaf etdirilməsində mühüm bir hissəsidir. TRY ... CATCH, SQL Server 2008, Azure SQL Veritabanı, Azure SQL Data Warehouse və Paralel Data Anbarından başlayaraq tətbiq olunur.

TRY .. CATCH təqdim

TRY ... CATCH, iki "Transact-SQL" ifadəsini təyin etməyə imkan verərək çalışır: "cəhd" etmək istəyən biri və başqaları yarada biləcək hər hansı bir səhvi "tutmaq" üçün istifadə etmək. SQL Server bir TRY ilə qarşılaşdıqda ... CATCH bəyanatı dərhal TRY bəndində əks olunan bəyanatı yerinə yetirir. TRY bəyanatını uğurla yerinə yetirirsə, SQL Server sadəcə olaraq hərəkət edir. Lakin, TRY bəyanatında bir səhv yararsa, SQL Server səhvsiz şəkildə həll etmək üçün CATCH ifadəsini icra edir.

Əsas sintaksis bu formu alır:

BEGIN TRY {sql_statement | statement_block} END TƏHSİL BAŞA ÇATI [{sql_statement | statement_block}] END CATCH [; ]

TRY ... CATCH Məsələn

Bir nümunə vasitəsilə bu bəyanatın istifadəsini anlamaq asandır. Təşkilatınızdakı hər bir işçi haqqında məlumatı olan "İşçilər" adlı bir masa ehtiva edən bir insan resursları bazasının administratoru olduğunuzu düşünün. Bu cədvəl birincil əsas kimi bir tam işçi ID nömrəsi istifadə edir. Veritabanınıza yeni bir işçi əlavə etmək üçün aşağıdakı bəyanatı istifadə etməyə cəhd edə bilərsiniz:

INSERT INTO işçiləri (id, ilk_adı, son_adı, uzadılması) VALUES (12497, 'Mike', 'Chapple', 4201)

Normal şəraitdə, bu bəyanat İşçilərin cədvəlinə bir sıra əlavə edəcəkdir. Lakin 12497 nömrəsi olan bir işçi verilənlər bazasında zaten varsa, satırı daxil etmə əsas əsas məhdudiyyəti pozacaq və aşağıdakı səhvlərə səbəb olacaq:

Msg 2627, Səviyyə 14, Dövlət 1, LINE 1 PRIMARY KEY məhdudiyyətinin pozulması 'PK_employee_id'. 'Dbo.employees' obyektinə dublikat aça bilmir. Bəyanat ləğv edildi.

Bu səhv, problemi gidermek üçün lazım olan məlumatları təmin edərkən, bununla əlaqədar iki məsələ var. Birincisi, mesaj gizlidir. Bu, səhv kodları, xətt nömrələrini və orta istifadəçi üçün anlaşılmaz olan digər məlumatları ehtiva edir. İkincisi, daha da vacib olaraq, bəyanatın qaldırılmasına səbəb olur və tətbiqin qəzalanmasına səbəb ola bilər.

Alternativ bir ifadəni, bir TRY ilə bağlamaqdır ... Aşağıda göstərildiyi kimi CATCH bəyanatı:

XÜSUSİYYƏTLƏRİ (12497, 'Mike', 'Chapple', 4201) END TƏŞƏKÇİLƏRİNİN BAŞLANMASI ÇƏRÇİĞİNİ BAŞLAYIN 'Hata:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Employee Mail', @recipients = 'hr@foo.com', @body = 'Yeni bir işçi yazısı yaratmaqda bir səhv baş verdi.', @subject = 'İşçilərin ID Çoğaltma Hatası'; END CATCH

Bu misalda baş verən hər hansı bir səhv komanda və hr@foo.com e-poçt ünvanını icra edən istifadəçilərə bildirilir. İstifadəçiyə göstərilən səhv aşağıda göstərilir:

Hata: PRIMARY KEY məhdudiyyətinin pozulması 'PK_employee_id'. 'Dbo.employees' obyektinə dublikat aça bilmir. Poçt sıralandı.

Ən əsası, tətbiqin icrası normal olaraq davam edir, proqramçıya həssaslıqla səhvdir. TRY istifadə ... CATCH ifadəsi SQL Server verilənlər bazası tətbiqlərində baş verən səhvləri proaktiv şəkildə aşkarlamaq və idarə etmək üçün zərif bir yoldur.

Ətraflı öyrən

Strukturlaşdırılmış Sorgu dili haqqında daha çox məlumat əldə etmək istəyirsinizsə, SQL-ə Giriş oxuyun.