สถานการณ์ของฉันเป็นดังนี้:
ตาราง STOCK_ARTICLES:
ID *[PK]*
OTHER_DB_ID
ITEM_NAME
ตาราง LOCATION:
ID *[PK]*
LOCATION_NAME
ตาราง WORK_PLACE:
ID *[PK]*
WORKPLACE_NAME
ตาราง INVENTORY_ITEMS:
ID *[PK]*
ITEM_NAME
STOCK_ARTICLE *[FK]*
LOCATION *[FK]*
WORK_PLACE *[FK]*
3 FKs ใน INVENTORY_ITEMS อ้างอิงคอลัมน์ "ID" ในตารางอื่น ๆ ที่เกี่ยวข้องอย่างชัดเจน
ตารางที่เกี่ยวข้องที่นี่คือ STOCK_ARTICLE และ INVENTORY_ITEMS
ขณะนี้มีงาน SQL ประกอบด้วยหลายขั้นตอน (สคริปต์ SQL) ที่ "ประสาน" ฐานข้อมูลที่กล่าวถึงข้างต้นกับฐานข้อมูลอื่น (OTHER_DB) หนึ่งในขั้นตอนในงานนี้คือ "การล้างข้อมูล" มันจะลบระเบียนทั้งหมดจาก STOCK_ITEMS ที่ไม่มีระเบียนที่สอดคล้องกันในฐานข้อมูลอื่นที่มี ID เดียวกัน ดูเหมือนว่านี้:
DELETE FROM STOCK_ARTICLES
WHERE
NOT EXISTS
(SELECT OTHER_DB_ID FROM
[OTHER_DB].[dbo].[OtherTable] AS other
WHERE other.ObjectID = STOCK_ARTICLES.OTHER_DB_ID)
แต่ขั้นตอนนี้มักจะล้มเหลวด้วย:
คำสั่ง DELETE ขัดแย้งกับข้อ จำกัด REFERENCE "FK_INVENTORY_ITEMS_STOCK_ARTICLES" ความขัดแย้งเกิดขึ้นในฐานข้อมูล "FIRST_DB", ตาราง "dbo.INVENTORY_ITEMS", คอลัมน์ 'STOCK_ARTICLES' [SQLSTATE 23000] (ข้อผิดพลาด 547) คำสั่งถูกยกเลิก [SQLSTATE 01000] (ข้อผิดพลาด 3621) ขั้นตอนล้มเหลว
ดังนั้นปัญหาคือมันไม่สามารถลบบันทึกจาก STOCK_ARTICLES เมื่อพวกเขาถูกอ้างอิงโดย INVENTORY_ITEMS แต่การล้างข้อมูลนี้จำเป็นต้องทำงาน ซึ่งหมายความว่าฉันอาจต้องขยายสคริปต์การล้างข้อมูลเพื่อให้ระบุระเบียนที่ควรลบออกจาก STOCK_ITEMS ก่อน แต่ไม่สามารถทำได้เนื่องจากรหัสที่เกี่ยวข้องนั้นอ้างอิงจากภายใน INVENTORY_ITEMS จากนั้นจึงควรลบระเบียนเหล่านั้นภายใน INVENTORY_ITEMS และหลังจากนั้นลบระเบียนภายใน STOCK_ARTICLES ฉันถูกไหม? รหัส SQL จะเป็นอย่างไร
ขอบคุณ.
INVENTORY_ITEMS
เป็นการเพิ่มใหม่ระหว่างสองDELETE
รายการ