TRY … CATCH paziņojums Transact-SQL sistēmā konstatē un apstrādā kļūdas stāvokli datu bāzu lietojumprogrammās. Šis paziņojums ir SQL Server kļūdu apstrādes stūrakmens, un tā ir nozīmīga daļa no spēcīgu datu bāzu lietojumprogrammu izstrādes. TRY … CATCH attiecas uz SQL Server, sākot ar 2008. gadu, Azure SQL datu bāzi, Azure SQL datu noliktavu un Parallel Data Warehouse.
Iepazīstinām ar TRY … CATCH
TRY … CATCH darbojas, ļaujot jums norādīt divus Transact-SQL paziņojumus: vienu, kuru vēlaties izmēģināt, bet otru, lai izmantotu, lai "nozagtu" visas iespējamās kļūdas. Kad SQL Server saskaras ar TRI … CATCH paziņojumu, tas nekavējoties izpilda paziņojumā iekļauto TRY klauzulu. Ja TRY paziņojums veiksmīgi izpildīts, SQL Server virza tālāk. Tomēr, ja TRY paziņojums rada kļūdu, SQL Server izpilda CATCH paziņojumu, lai graciozi risinātu kļūdu.
Pamata sintakse izmanto šo formu:
Sākt mēģināt paziņojuma bloks END TRYSĀKT PĀRVIETOŠANUsql_statementEND CATCH ; Izmantojot šo paziņojumu, ir viegli saprast, izmantojot piemēru. Iedomājieties, ka esat cilvēkresursu datubāzes administrators, kurā ir tabula ar nosaukumu "Darbinieki", kurā ir informācija par katru no jūsu uzņēmuma darbiniekiem. Šajā tabulā primārā atslēga tiek izmantota veselu skaitļu darbinieku identifikācijas numurs. Iespējams mēģināt izmantot tālāk redzamo paziņojumu, lai ievietotu jaunu darbinieks savā datubāzē: INSERT INTO darbiniekiem (id, first_name, last_name, extension)VĒRTĪBAS (12497, "Mike", "Chapple", 4201)
Normālos apstākļos šis paziņojums rindu pievienotu tabulai Darbinieki. Tomēr, ja darbinieks ar ID 12497 jau ir datu bāzē, rindas ievietošana pārkāpj primāro atslēgas ierobežojumu un radīs šādu kļūdu: Msg 2627, 14. līmenis, 1. stāvoklis, 1. rindaPRIMARY KEY ierobežojuma pārkāpums "PK_employee_id". Nevar ievietot dublējošo atslēgu objektā 'dbo.employees'.Paziņojums ir izbeigts.
Kaut arī šī kļūda sniedz jums informāciju, kas nepieciešama, lai novērstu problēmu, tajā ir divas problēmas. Pirmkārt, ziņa ir noslēpumaina. Tas ietver kļūdas kodus, rindu numurus un citu informāciju, kas nav saprotama vidējam lietotājam. Otrkārt, un vēl svarīgāk, tas izraisa paziņojumu pārtraukt un var izraisīt pieteikuma avāriju.Alternatīva ir aprakstīt paziņojumu TRY … CATCH paziņojumā, kā parādīts šeit: Sākt mēģinātINSERT INTO darbiniekiem (id, first_name, last_name, extension)VĒRTĪBAS (12497, "Mike", "Chapple", 4201)END TRYSĀKT PĀRVIETOŠANUPRINT 'ERROR:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Darbinieku pasts',@ recipients = '[email protected]',@body = 'Radās kļūda, izveidojot jaunu darbinieku ierakstu.',@subject = 'Darbinieku ID atkārtojuma kļūda';END CATCH
Šajā piemērā visas iespējamās kļūdas tiek ziņotas gan lietotājam, kas izpilda komandu, gan [email protected] e-pasta adresi. Parādīta lietotājam kļūda: Kļūda: PRIMARY KEY ierobežojuma pārkāpums "PK_employee_id". Nevar ievietot dublējošo atslēgu objektā 'dbo.employees'.Pasta rindā.
Lietojumprogrammu izpilde turpinās normāli, ļaujot programmētājam apstrādāt kļūdu. TRY … CATCH paziņojums ir elegants veids, kā aktīvi atklāt un novērst kļūdas, kas rodas SQL Server datu bāzu lietojumprogrammās. Ja vēlaties uzzināt vairāk par strukturēto vaicājumu valodu, iepazīstieties ar SQL ieviešanu. TRY … CATCH piemērs
Mācīties vairāk













