4
เหตุใด Sql Server จึงยังคงทำงานหลังจาก raiserror เมื่อ xact_abort เปิดอยู่
ฉันรู้สึกประหลาดใจกับบางสิ่งใน TSQL ฉันคิดว่าถ้าเปิด xact_abort จะเรียกอะไรแบบนี้ raiserror('Something bad happened', 16, 1); จะหยุดการดำเนินการของกระบวนงานที่เก็บไว้ (หรือชุดใด ๆ ) แต่ข้อความแสดงข้อผิดพลาด ADO.NET ของฉันพิสูจน์แล้วว่าตรงกันข้าม ฉันได้รับทั้งข้อความแสดงข้อผิดพลาด raiserror ในข้อความข้อยกเว้นรวมถึงสิ่งถัดไปที่พังหลังจากนั้น นี่เป็นวิธีแก้ปัญหาของฉัน (ซึ่งก็เป็นนิสัยของฉันอยู่ดี) แต่ดูเหมือนว่ามันจะไม่จำเป็น: if @somethingBadHappened begin; raiserror('Something bad happened', 16, 1); return; end; เอกสารกล่าวว่า: เมื่อ SET XACT_ABORT เปิดอยู่หากคำสั่ง Transact-SQL ทำให้เกิดข้อผิดพลาดขณะทำงานธุรกรรมทั้งหมดจะถูกยกเลิกและย้อนกลับ หมายความว่าฉันต้องใช้ธุรกรรมที่โจ่งแจ้งหรือไม่?
88
sql
sql-server
tsql