ฉันมีกระบวนการย้ายแถวจากฐานข้อมูลหนึ่งไปยังอีกฐานข้อมูลหนึ่ง เนื่องจากมีการเชื่อมโยงคีย์ต่างประเทศแบบวงกลมบางรายการ ฉันจึงไม่สามารถลบแถวออกจากฐานข้อมูลเก่าได้ และไม่สามารถแทรกแถวเหล่านั้นลงในฐานข้อมูลใหม่ได้
เนื่องจากการดำเนินการทั้งหมดเกิดขึ้นในธุรกรรม1 ฉันต้องการให้ SQL Server เพิกเฉยต่อความล้มเหลวในความสมบูรณ์ของการอ้างอิงจนกว่าฉันจะเรียก COMMIT TRANSACTION
ตัวอย่างเช่น2:
Table: Turboencabulators Table: Marselvanes
========================= =======================
PK TurboencabulatorID int /-> PK MarselvaneID int
^ MarselvanesID int --/ HasGrammeter bit
| PantametricFan varchar(50)
+------------------------------- TurboencabulatorID int
หากฉันพยายามแทรก turboencabulator ในตารางใหม่ มันจะล้มเหลวหากไม่มี marselvane อยู่ที่นั่นอยู่แล้ว การกลับคำสั่งมีปัญหาเดียวกัน
เมื่อพยายามลบแถวเก่า ฉันไม่สามารถลบแถวหนึ่งได้จนกว่าอีกแถวจะถูกลบ
ฉันได้ลองทำระบบเฟส n โดยที่แถวทั้งหมดจะถูกแทรกด้วยคอลัมน์ใดๆ ที่อยู่ภายใต้ข้อจำกัดของคีย์นอกที่ตั้งค่าเป็น null จากนั้น ฉันจะอัปเดตแถวที่แทรกทั้งหมด โดยวางค่าที่ขาดหายไปอย่างเหมาะสม จากนั้น หากต้องการลบแถวต้นทาง ฉันจะลบคอลัมน์ทั้งหมดที่ได้รับผลกระทบจาก FK จากนั้นจึงลบแถวจริง3
สิ่งที่ฉันต้องการจริงๆ คือดำเนินการ T-SQL ของฉัน และไม่ให้ SQL Server บอกฉันจนกว่าฉันจะพยายามเรียกคอมมิต
หมายเหตุ
1กระจาย
2ประดิษฐ์ขึ้นสมมุติ
3ซึ่งฉันไม่ได้ทำอีกต่อไป