ทริกเกอร์ร่วมกับการทำธุรกรรม


25

สมมติว่าเรามีสถานการณ์ต่อไปนี้:

เรามีตาราง (พูด Let 's Table_A), INSERTชมีทริกเกอร์บน งานทริกเกอร์คือการอัพเดตบางแถวtable_Btable_Aขึ้นอยู่กับค่าที่แทรกอยู่ใน

ตอนนี้ทุกอย่างก็โอเคเมื่อเราแทรกแถวในตารางอย่างง่าย แต่แล้วสถานการณ์ที่เราแทรกข้อมูลผ่านการทำธุรกรรมล่ะ ทริกเกอร์จะรอจนกว่าคำสั่งการทำธุรกรรมทั้งหมดจะทำงานได้สำเร็จหรือจะถูกเรียกใช้ทันทีที่มันรับรู้ถึงการแทรก? หากทริกเกอร์ยิงทันทีเมื่อรับรู้การแทรกครั้งแรกจะเกิดอะไรขึ้นถ้าทรานแซคชันล้มเหลวในแถวสุดท้าย มีกลไกสำหรับสถานการณ์นั้นไหม

คำตอบ:


37

แทรกเป็นเสมอภายในการทำธุรกรรม

หากคุณไม่ได้มีความชัดเจนBEGIN TRAN ... COMMITหรือSET IMPLICIT_TRANSACTIONS ONแล้วคำสั่งที่วิ่งเป็นตัวเองที่มีรถยนต์กระทำธุรกรรม

ทริกเกอร์เป็นส่วนหนึ่งของการทำธุรกรรมสำหรับการกระทำที่เริ่มทริกเกอร์เสมอ หากมีข้อผิดพลาดเกิดขึ้นในทริกเกอร์ที่เป็นสาเหตุของการทำธุรกรรมย้อนกลับการดำเนินการยิงจะถูกย้อนกลับด้วย

ทริกเกอร์โดยปริยายมีXACT_ABORTใน ข้อผิดพลาดกับการตั้งค่านี้จะนำไปสู่การย้อนกลับการทำธุรกรรมโดยอัตโนมัติ (ยกเว้นข้อผิดพลาดที่เกิดขึ้นในรหัสที่มีRAISERRORคำสั่ง)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.