ตามที่ Nick และ Martin กล่าวไว้สถานะของแบบสอบถามของคุณขึ้นอยู่กับว่า SQL Server รู้เกี่ยวกับการดึงสายเคเบิลเครือข่ายของคุณก่อนที่แบบสอบถามจะเสร็จสมบูรณ์หรือไม่ จากBooks Online (แม้ว่าฉันจะพบว่ามันน่าสนใจที่มีหัวข้อเทียบเท่าในปี 2000 , 2005 , 2008 , และ2008 R2แต่ไม่ใช่ 2012 หรือ 2014):
หากมีข้อผิดพลาดป้องกันความสำเร็จของการทำธุรกรรม SQL Server จะย้อนกลับธุรกรรมโดยอัตโนมัติและเพิ่มทรัพยากรทั้งหมดที่ถือโดยธุรกรรม ถ้าการเชื่อมต่อเครือข่ายของลูกค้าไปยังอินสแตนซ์ของโปรแกรมฐานข้อมูลไม่ทำงานธุรกรรมที่ค้างอยู่สำหรับการเชื่อมต่อจะถูกย้อนกลับเมื่อเครือข่ายแจ้งเตือนอินสแตนซ์ของตัวแบ่ง หากแอปพลิเคชันไคลเอนต์ล้มเหลวหรือหากคอมพิวเตอร์ไคลเอนต์หยุดทำงานหรือรีสตาร์ทสิ่งนี้จะทำให้การเชื่อมต่อหยุดชะงักและอินสแตนซ์ของโปรแกรมฐานข้อมูลจะย้อนกลับการเชื่อมต่อใด ๆ ที่ค้างอยู่เมื่อเครือข่ายแจ้งการแตก หากลูกค้าออกจากระบบแอปพลิเคชันธุรกรรมที่ค้างอยู่จะถูกยกเลิก
(นอกเหนือจากนั้นคำว่าการเชื่อมต่อในประโยคสุดท้ายที่ 2 อาจหมายถึงการทำธุรกรรมฉันไม่รู้ว่าจะย้อนกลับหนึ่งการเชื่อมต่อได้อย่างไร)
ในทำนองเดียวกัน SQL Server อาจเลิกทำหรือทำธุรกรรมซ้ำระหว่างการกู้คืนหลังจากที่เซิร์ฟเวอร์ถูกปิดโดยไม่คาดคิดและสิ่งนี้จะขึ้นอยู่กับสถานะของการทำธุรกรรมในขณะที่ปิดเครื่อง ฉันเคยเห็นผู้คนใช้กลยุทธ์นี้เพื่อให้บรรลุสิ่งที่คุณพยายามทำ (ยกเลิกการทำธุรกรรม) และเมื่อเซิร์ฟเวอร์เริ่มทำงานอีกครั้งงานส่วนใหญ่ก็เพิ่งทำใหม่ เป็นศูนย์เกินกว่าที่คาดไว้)
ดังนั้นแทนที่จะอยู่ภายใต้สิ่งนี้แทนที่จะทำสิ่งที่รุนแรงในความหวาดกลัวเช่นการดึงสายเคเบิลเครือข่ายหรือปิดเครื่องผมขอแนะนำในอนาคตคุณมีระเบียบวินัยที่ดีกว่าเกี่ยวกับการเรียกใช้แบบสอบถามเฉพาะกิจกับระบบที่สำคัญ ตัวอย่างเช่นแทนที่จะเป็น:
UPDATE dbo.sometable
-- where *oops* I forgot this part
มีสิ่งนี้:
BEGIN TRANSACTION;
UPDATE dbo.sometable
-- where *oops* I forgot this part
-- COMMIT TRANSACTION;
-- ROLLBACK TRANSACTION;
จากนั้นหากการอัปเดตนั้นถูกต้องคุณสามารถเน้นCOMMIT
ส่วนและเรียกใช้งานได้ หากไม่เป็นเช่นนั้นคุณสามารถเน้นส่วนที่ใจเย็นROLLBACK
และดำเนินการนั้นได้ คุณสามารถใช้ Add-in เช่นSSMS Tools Packเพื่อแก้ไขNew Query
เทมเพลตของคุณเพื่อรวมสำเร็จรูปได้
ตอนนี้ก็ยังอาจทำให้คุณมีปัญหาในกรณีที่คุณเรียกใช้แบบสอบถามแล้วไม่กระทำหรือย้อนกลับเพราะตอนนี้ธุรกรรมของคุณกำลังบล็อกผู้ใช้รายอื่น แต่นี่จะเป็นการแก้ไขข้อมูลที่ดีกว่าอย่างถาวร
และแน่นอนเช่นเคยมีการสำรองข้อมูลที่คุณวางใจได้