Transact-SQL paziņojums TRY / CATCH nosaka un apstrādā kļūdu apstākļus datu bāzes lietojumprogrammās. Šis paziņojums ir SQL Servera kļūdu apstrāde un tā ir svarīga daļa no spēcīgu datu bāzes lietojumprogrammu izstrādes.
TRY / CATCH attiecas uz SQL Server, sākot ar 2008. gadu, Azure SQL Database, Azure SQL Data Warehouse un Parallel Data Warehouse.
Iepazīstinām ar TRY / CATCH
TRY. Kad SQL Server sastop TRY / CATCH priekšrakstu, tas nekavējoties izpilda TRY klauzulā iekļauto paziņojumu. Ja TRY priekšraksts tiek veiksmīgi izpildīts, SQL Server pāriet uz priekšu. Tomēr, ja TRY priekšraksts rada kļūdu, SQL Server izpilda CATCH priekšrakstu, lai apstrādātu kļūdu graciozi.
Pamata sintakse ir šāda:
SĀKT MĒĢINĀT
{sql_statement | paziņojuma bloks}
BEIGIET MĒĢINĀT
SĀKT NOZVEJU
[{sql_statement | paziņojums_bloks}]
GALA NOZVEJUMS
[; ]
MĒĢINIET / NOĶERIET piemēru
Apsveriet cilvēkresursu datu bāzi, kurā ir nosaukta tabula darbinieki, kurā ir informācija par katru uzņēmuma darbinieku. Šajā tabulā kā veselais skaitlis tiek izmantots darbinieka ID numurs primārā atslēga.
Varat mēģināt izmantot tālāk sniegto paziņojumu, lai savā datu bāzē ievietotu jaunu darbinieku:
IEVADĪT darbiniekus (ID, vārds, uzvārds, paplašinājums)
VĒRTĪBAS (12497, 'Mike', 'Chapple', 4201)
Normālos apstākļos šis paziņojums tabulai Darbinieki pievienotu rindu. Tomēr, ja datu bāzē jau pastāv darbinieks ar ID 12497, ievietojot rindu, tiktu pārkāpts primārās atslēgas ierobežojums un radusies šāda kļūda:
MS 2627, 14. līmenis, 1. stāvoklis, 1. rinda
PIRMĀS ATSLĒGAS ierobežojuma “PK_employee_id” pārkāpums. Nevar ievietot atslēgas dublikātu objektā “dbo.employees”.
Paziņojums ir izbeigts.
Lai gan šī kļūda sniedz informāciju, kas nepieciešama problēmas novēršanai, ar to ir divas problēmas. Pirmkārt, ziņojums ir noslēpumains. Tas ietver kļūdu kodus, rindu numurus un citu parastam lietotājam nesaprotamu informāciju. Otrkārt, un vēl svarīgāk, tas izraisa paziņojuma pārtraukšanu un var izraisīt lietojumprogrammas avāriju.
Alternatīva ir ietīt paziņojumu TRY… CATCH priekšrakstā, kā parādīts šeit:
SĀKT MĒĢINĀT
IEVADĪT darbiniekus (ID, vārds, uzvārds, paplašinājums)
VĒRTĪBAS (12497, 'Mike', 'Chapple', 4201)
BEIGIET MĒĢINĀT
SĀKT NOZVEJU
PRINT 'ERROR:' + ERROR_MESSAGE ();
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Darbinieku pasts',
@recipients = '[email protected]',
@body = 'Radās kļūda, veidojot jaunu darbinieku ierakstu.',
@subject = 'Darbinieku datu bāzes kļūda';
GALA NOZVEJUMS
Šajā piemērā par iespējamām kļūdām tiek ziņots gan lietotājam, kurš izpilda komandu, gan [email protected] e-pasta adresei. Lietotājam parādītā kļūda ir šāda:
Kļūda: PRIMARY KEY ierobežojuma “PK_employee_id” pārkāpums.
Nevar ievietot atslēgas dublikātu objektā “dbo.employees”.
Pasta rindā.
Lietojumprogrammas izpilde turpinās normāli, ļaujot programmētājam rīkoties ar kļūdu. TRY / CATCH priekšraksta izmantošana ir elegants veids, kā proaktīvi atklāt un rīkoties ar kļūdām, kas rodas SQL Server datu bāzes lietojumprogrammās.
Uzziniet vairāk
Lai uzzinātu vairāk par strukturēto vaicājumu valodu, skatiet mūsu rakstu SQL pamati.