មគ្គុទេសក៍ជំហានដោយជំហានដើម្បីប្រើ TRY ... CATCH ដើម្បីដោះស្រាយកំហុសម៉ាស៊ីនបម្រើ SQL

កំណត់អត្តសញ្ញាណកំហុសដោយគ្មានការកាត់ទោស

សេចក្តីថ្លែងការណ៍ TRY ... CATCH នៅក្នុង Transact- SQL បាន រកឃើញនិងដោះស្រាយលក្ខខណ្ឌកំហុសនៅក្នុងកម្មវិធីមូលដ្ឋានទិន្នន័យរបស់អ្នក។ សេចក្តីថ្លែងការណ៍នេះគឺជាមូលដ្ឋានគ្រឹះនៃការគ្រប់គ្រងកំហុស SQL Server និងជាផ្នែកមួយដ៏សំខាន់នៃការអភិវឌ្ឍកម្មវិធីមូលដ្ឋានទិន្នន័យដ៏រឹងមាំ។ TRY ... CATCH អនុវត្តទៅម៉ាស៊ីនបម្រើ SQL ដែលចាប់ផ្តើមជាមួយ 2008, Azure មូលដ្ឋានទិន្នន័យ SQL, ឃ្លាំងទិន្នន័យ SQL Azure និងឃ្លាំងទិន្នន័យប៉ារ៉ាឡែល។

ការណែនាំ TRY..CATCH

TRY ... CATCH ដំណើរការដោយអនុញ្ញាតឱ្យអ្នកបញ្ជាក់ពីសេចក្តីថ្លែងការណ៍ Transact-SQL ពីរ: មួយដែលអ្នកចង់សាកល្បងនិងមួយទៀតប្រើដើម្បី "ចាប់" កំហុសដែលអាចកើតឡើង។ នៅពេលដែលម៉ាស៊ីនបម្រើ SQL ជួបប្រទះ TRY ... CATCH វាភ្លាមប្រតិបត្តិសេចក្តីថ្លែងការណ៍រួមបញ្ចូលក្នុងឃ្លា TRY ។ ប្រសិនបើសេចក្តីថ្លែងការណ៍ TRY ប្រតិបត្តិដោយជោគជ័យ, ម៉ាស៊ីនបម្រើ SQL គ្រាន់តែផ្លាស់ទីនៅលើ។ ទោះជាយ៉ាងណាក៏ដោយប្រសិនបើសេចក្តីថ្លែងការណ៍ TRY បង្កើតកំហុសមួយ SQL Server ប្រតិបត្តិសេចក្តីថ្លែងការណ៍ CATCH ដើម្បីដោះស្រាយដោយភាពត្រឹមត្រូវកំហុស។

វាក្យសម្ព័ន្ធជាមូលដ្ឋានយកសំណុំបែបបទនេះ:

BEGIN TRY {sql_statement | statement_block} បញ្ចប់ការព្យាយាមចាប់ផ្តើម [{sql_statement | statement_block}] END CATCH [; ]

សាកល្បង ... ឧទាហរណ៏

វាងាយស្រួលបំផុតដើម្បីយល់ពីការប្រើប្រាស់សេចក្តីថ្លែងការណ៍នេះតាមរយៈការប្រើប្រាស់ឧទាហរណ៍។ ស្រមៃថាអ្នកគឺជាអ្នកគ្រប់គ្រងនៃមូលដ្ឋានទិន្នន័យធនធានមនុស្សដែលមានតារាងឈ្មោះ "និយោជិក" ដែលមានព័ត៌មានអំពីបុគ្គលិកម្នាក់ៗនៅក្នុងអង្គភាពរបស់អ្នក។ តារាងនោះប្រើលេខសម្គាល់បុគ្គលិកចំនួនគត់ជា កូនសោសំខាន់ ។ អ្នកអាចព្យាយាមប្រើសេចក្តីថ្លែងការណ៍ខាងក្រោមដើម្បីបញ្ចូលនិយោជិកថ្មីនៅក្នុងមូលដ្ឋានទិន្នន័យរបស់អ្នក:

និយោជិត INSERT INTO (id, first_name, last_name, extension) VALUES (12497, 'Mike', 'Chapple', 4201)

ក្រោមកាលៈទេសៈធម្មតាសេចក្តីថ្លែងការណ៍នេះនឹងបន្ថែមជួរដេកមួយទៅតារាងនិយោជិក។ ទោះយ៉ាងណាក៏ដោយប្រសិនបើនិយោជិតដែលមានលេខសម្គាល់ 12497 មាននៅក្នុងមូលដ្ឋានទិន្នន័យរួចហើយការបញ្ចូលជួរដេកនឹងបំពានលើឧបសគ្គចម្បងហើយបណ្តាលឱ្យមានកំហុសដូចខាងក្រោម:

Msg 2627, កំរិត 14, State 1, បន្ទាត់ទី 1 ការរំលោភបំពាននៃឧបសគ្គ PRIMARY KEY 'PK_employee_id' ។ មិនអាចបញ្ចូលកូនសោចម្លងក្នុងវត្ថុ 'dbo.employees' ទេ។ សេចក្តីថ្លែងការណ៍ត្រូវបានបញ្ចប់។

ខណៈពេលដែលកំហុសនេះផ្តល់ឱ្យអ្នកនូវព័ត៌មានដែលអ្នកត្រូវការដោះស្រាយបញ្ហាបញ្ហាមានបញ្ហាពីរជាមួយវា។ ទីមួយសារគឺមិនច្បាស់លាស់។ វារួមបញ្ចូលកូដកំហុសលេខបន្ទាត់និងព័ត៌មានផ្សេងទៀតដែលមិនអាចយល់បានចំពោះអ្នកប្រើប្រាស់មធ្យម។ ទីពីរហើយសំខាន់ជាងនេះវាបណ្តាលអោយសេចក្តីថ្លែងការណ៍បញ្ឈប់ហើយអាចបណ្តាលឱ្យកម្មវិធីមួយគាំង។

ជម្រើសគឺដើម្បីរុំសេចក្តីថ្លែងការណ៍នៅក្នុងសេចក្តីថ្លែងការណ៍ TRY ... CATCH ដូចបានបង្ហាញខាងក្រោម:

BEGIN សាកល្បងផ្ញើចូលបុគ្គលិក (id, first_name, last_name, extension) VALUES (12497, 'Mike', 'Chapple', 4201) បញ្ចប់ការសាកល្បងសរសេរ 'កំហុសឆ្គង:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'អ៊ីមែលបុគ្គលិក', @recipients = 'hr @ foo.com', @body = 'កំហុសមួយបានកើតឡើងក្នុងការបង្កើតកំណត់ត្រានិយោជិតថ្មី។ ', @subject = 'កំហុសនិយោជិកលេខសំងាត់ស្ទួន'; បញ្ចប់ការឆក់

ក្នុងឧទាហរណ៍នេះកំហុសណាមួយដែលកើតឡើងត្រូវបានរាយការណ៍ទៅអ្នកប្រើដែលប្រតិបត្តិពាក្យបញ្ជានិងអាសយដ្ឋានអ៊ីមែល hr@foo.com ។ កំហុសដែលបង្ហាញដល់អ្នកប្រើប្រាស់លេចឡើងខាងក្រោម:

កំហុស: ការរំលោភបំពានលើឧបសគ្គ PRIMARY KEY 'PK_employee_id' ។ មិនអាចបញ្ចូលកូនសោចម្លងក្នុងវត្ថុ 'dbo.employees' ទេ។ សំបុត្របានដាក់ជាជួរ។

អ្វីដែលសំខាន់បំផុតគឺការអនុវត្តកម្មវិធីនៅតែបន្តជាធម្មតាអនុញ្ញាតឱ្យអ្នកសរសេរកម្មវិធីដោះស្រាយកំហុសដោយប្រើក្រមសីលធម៌។ ការប្រើប្រាស់សេចក្តីថ្លែងការណ៍ TRY ... CATCH គឺជាវិធីឆើតឆាយដើម្បីរកឱ្យឃើញនិងចាត់វិធានការជាមុននូវកំហុសដែលកើតឡើងនៅក្នុងកម្មវិធីមូលដ្ឋានទិន្នន័យ SQL Server ។

រៀនបន្ថែមទៀត

ប្រសិនបើអ្នកចង់ស្វែងយល់បន្ថែមអំពីភាសាសំណួររចនាសម្ព័ន្ធសូមអាន សេចក្តីផ្តើមទៅ SQL