ຄູ່ມືຂັ້ນຕອນໂດຍຂັ້ນຕອນການໃຊ້ TRY ... CATCH ທີ່ຈະຈັດການຂໍ້ຜິດພາດ SQL Server

ກໍານົດຂໍ້ຜິດພາດໂດຍບໍ່ມີການຂັດຂວາງການປະຕິບັດ

ຄໍາສັ່ງ TRY ... CATCH ໃນ Transact- SQL ກວດພົບແລະຈັດການເງື່ອນໄຂຜິດພາດໃນການນໍາໃຊ້ຖານຂໍ້ມູນຂອງທ່ານ. ຄໍາຖະແຫຼງນີ້ເປັນພື້ນຖານຂອງການຄຸ້ມຄອງຂໍ້ຜິດພາດຂອງ SQL Server ແລະເປັນສ່ວນຫນຶ່ງທີ່ສໍາຄັນໃນການພັດທະນາໂປແກຼມຖານຂໍ້ມູນທີ່ເຂັ້ມແຂງ. TRY ... CATCH ໃຊ້ກັບ SQL Server ເລີ່ມຕົ້ນດ້ວຍ 2008, Azure SQL Database, Azure SQL Data Warehouse ແລະ Parallel Data Warehouse.

ແນະນໍາ TRY..CATCH

TRY ... CATCH ເຮັດວຽກໂດຍການອະນຸຍາດໃຫ້ທ່ານລະບຸສອງຄໍາສັ່ງ Transact-SQL: ຫນຶ່ງທີ່ທ່ານຕ້ອງການ "ພະຍາຍາມ" ແລະອື່ນທີ່ຈະໃຊ້ "ການຈັບ" ຂໍ້ຜິດພາດທີ່ອາດເກີດຂຶ້ນ. ເມື່ອ SQL Server ພົບຂໍ້ມູນ TRY ... CATCH, ມັນກໍ່ປະຕິບັດຄໍາສັ່ງທີ່ລວມຢູ່ໃນຄໍາສັບ TRY. ຖ້າຄໍາສັ່ງ TRY ດໍາເນີນການປະຕິບັດແລ້ວ, SQL Server ພຽງແຕ່ຍ້າຍໄປ. ຢ່າງໃດກໍຕາມ, ຖ້າຄໍາສັ່ງ TRY ສ້າງຂໍ້ຜິດພາດ, SQL Server ຈະດໍາເນີນການຄໍາສັ່ງ CATCH ເພື່ອແກ້ໄຂຂໍ້ຜິດພາດດ້ວຍຄວາມຜ່ອນຄາຍ.

syntax ພື້ນຖານໃຊ້ແບບຟອມນີ້:

BEGIN TRY {sql_statement | statement_block} END TRY BEGIN CATCH [{sql_statement | statement_block}] END CATCH [ ]

TRY ... CATCH ຕົວຢ່າງ

ມັນງ່າຍທີ່ສຸດທີ່ຈະເຂົ້າໃຈການນໍາໃຊ້ຄໍາເວົ້ານີ້ໂດຍໃຊ້ຕົວຢ່າງ. ຈິນຕະນາການວ່າທ່ານເປັນຜູ້ເບິ່ງແຍງລະບົບຖານຂໍ້ມູນຊັບພະຍາກອນມະນຸດທີ່ມີຕາຕະລາງທີ່ມີຊື່ວ່າ "ພະນັກງານ" ທີ່ມີຂໍ້ມູນກ່ຽວກັບແຕ່ລະພະນັກງານໃນອົງກອນຂອງທ່ານ. ຕາຕະລາງທີ່ນໍາໃຊ້ເລກຫມາຍເລກພະນັກງານຈໍານວນເຕັມເປັນ ຫຼັກຫຼັກ . ທ່ານອາດຈະພະຍາຍາມໃຊ້ຄໍາສັ່ງຂ້າງລຸ່ມນີ້ເພື່ອສະແດງພະນັກງານໃຫມ່ເຂົ້າໃນຖານຂໍ້ມູນຂອງທ່ານ:

ພະນັກງານ INSERT INTO (id, first_name, last_name, extension) VALUES (12497, 'Mike', 'Chapple', 4201)

ພາຍໃຕ້ສະຖານະການປົກກະຕິ, ລາຍງານນີ້ຈະເພີ່ມແຖວເກັດທີ່ຢູ່ໃນຕາຕະລາງພະນັກງານ. ຢ່າງໃດກໍຕາມ, ຖ້າພະນັກງານທີ່ມີ ID 12497 ມີຢູ່ໃນຖານຂໍ້ມູນແລ້ວ, ການໃສ່ແຖວນັ້ນຈະລະເມີດກົດທີ່ສໍາຄັນແລະຜົນຕໍ່ໄປນີ້ຄື:

Msg 2627, Level 14, State 1, Line 1 Violation of constraint PRIMARY KEY 'PK_employee_id'. ບໍ່ສາມາດໃສ່ຄີສໍາເນົາໃນ object 'dbo.employees'. ຄໍາຖະແຫຼງທີ່ໄດ້ຖືກຍົກເລີກ.

ໃນຂະນະທີ່ຂໍ້ຜິດພາດນີ້ໃຫ້ທ່ານມີຂໍ້ມູນທີ່ທ່ານຕ້ອງການແກ້ໄຂບັນຫາ, ມີສອງບັນຫາກັບມັນ. ຫນ້າທໍາອິດ, ຂໍ້ຄວາມແມ່ນຂີ້ຕົວະ. ມັນປະກອບມີລະຫັດຜິດພາດ, ຈໍານວນເສັ້ນແລະຂໍ້ມູນອື່ນໆທີ່ບໍ່ເຂົ້າໃຈກັບຜູ້ໃຊ້ສະເລ່ຍ. ຄັ້ງທີສອງ, ແລະສໍາຄັນກວ່ານັ້ນ, ມັນເຮັດໃຫ້ຄໍາຖະແຫຼງຖືກຍົກເລີກແລະສາມາດເຮັດໃຫ້ເກີດການລົ້ມລະລາຍຂອງໃບຄໍາຮ້ອງ.

ທາງເລືອກແມ່ນເພື່ອຫໍ່ຄໍາສັ່ງໃນຄໍາສັ່ງ TRY ... CATCH, ດັ່ງທີ່ສະແດງໄວ້ຂ້າງລຸ່ມນີ້:

BEGIN TRY INSERT INTO employees (id, first_name, last_name, extension) VALUES (12497, 'Mike', 'Chapple', 4201) END TRY BEGIN CATCH PRINT 'Error:' + ERROR_MESSAGE () EXEC msdbdbosp_send_dbmail @profile_name = 'Employee Mail', @recipients = 'hr @ foocom', @body = 'ຂໍ້ຜິດພາດເກີດຂຶ້ນການສ້າງບັນທຶກພະນັກງານໃຫມ່', @subject = 'Employee ID Duplication Error'; END CATCH

ໃນຕົວຢ່າງນີ້, ຂໍ້ຜິດພາດໃດໆທີ່ເກີດຂື້ນຈະຖືກລາຍງານໃຫ້ຜູ້ໃຊ້ປະຕິບັດຄໍາສັ່ງແລະ hr@foo.com ທີ່ຢູ່ອີເມວ. ຂໍ້ຜິດພາດທີ່ສະແດງໃຫ້ຜູ້ໃຊ້ປາກົດຢູ່ຂ້າງລຸ່ມນີ້:

ຂໍ້ຜິດພາດ: ການລະເມີດກົດຈໍາກັດ PRIMARY KEY 'PK_employee_id'. ບໍ່ສາມາດໃສ່ຄີສໍາເນົາໃນ object 'dbo.employees'. Mail queued

ສິ່ງສໍາຄັນຫຼາຍທີ່ສຸດ, ການປະຕິບັດຄໍາຮ້ອງສະຫມັກຍັງສືບຕໍ່ເປັນປົກກະຕິ, ອະນຸຍາດໃຫ້ຜູ້ປະກອບການທີ່ມີປະສິດທິພາບໃນການແກ້ໄຂຂໍ້ຜິດພາດ. ການນໍາໃຊ້ຄໍາສັ່ງ TRY ... CATCH ແມ່ນວິທີທີ່ສະຫງ່າງາມໃນການກວດສອບແລະຈັດການຂໍ້ຜິດພາດທີ່ເກີດຂື້ນໃນຄໍາຮ້ອງສະຫມັກຖານຂໍ້ມູນ SQL Server.

ຮຽນຮູ້ເພີ່ມເຕີມ

ຖ້າທ່ານຕ້ອງການຮຽນຮູ້ເພີ່ມເຕີມກ່ຽວກັບພາສາຄໍາຖາມແບບໂຄງສ້າງ, ອ່ານ ຄໍາແນະນໍາກ່ຽວກັບ SQL .