Izmantojot TRY / CATCH, lai apstrādātu SQL servera kļūdas

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.

instagram viewer

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.