หากนี่คือสิ่งที่คุณวางแผนที่จะทำอย่างสม่ำเสมอ (เช่นเป็นส่วนหนึ่งของตรรกะแอปพลิเคชันและไม่ใช่แบบฝึกหัดการแปลงข้อมูลแบบครั้งเดียว) จากนั้นคุณสามารถใช้มุมมองไปที่ Table1 และ Table2 พร้อมกับINSTEAD OF INSERT
ทริกเกอร์เพื่อจัดการแยกข้อมูล กุญแจ / ความสัมพันธ์) จากนั้นคุณจะทำ:
INSERT newView SELECT NEWID(), A, B, C, D, E, F FROM MyTable
และทริกเกอร์อาจจะง่ายเหมือน:
CREATE trg_newview_insert TRIGGER newView INSTEAD OF UPDATE AS
INSERT table1 SELECT ID, A, B, C FROM inserted
INSERT table2 SELECT ID, D, E, F FROM inserted
GO
สมมติว่ามุมมองเป็นสิ่งที่ชอบ:
CREATE VIEW newView AS
SELECT table1.ID, A, B, C, D, E, F
FROM table1
JOIN table2 ON table1.ID = table2.ID;
หรือหากอาจมีแถวในแต่ละตารางโดยไม่มีแถวที่ตรงกันในอีก:
CREATE VIEW newView AS
SELECT ISNULL(table1.ID, table2.ID), A, B, C, D, E, F
FROM table1
FULL OUTER JOIN table2 ON table1.ID = table2.ID;
(แน่นอนว่าแถวใดที่มีเอาต์พุตเมื่อคุณSELECT
จากมุมมองนั้นไม่สำคัญถ้าคุณไม่ต้องการSELECT
จากมันและมีอยู่เพื่อให้แม่แบบINSERT
เข้าไปเพื่อให้ทริกเกอร์ทำมายากล)
นี่คือการสันนิษฐานว่าคุณตั้งใจจะใช้ประเภท UUID สำหรับคีย์หลักของคุณในกรณีนี้ - หากคุณใช้คีย์จำนวนเต็มที่เพิ่มขึ้นโดยอัตโนมัติในตารางที่ 1 จะมีงานอีกเล็กน้อยที่ต้องทำ สิ่งต่อไปนี้อาจใช้งานได้:
CREATE trg_newview_insert TRIGGER newView INSTEAD OF UPDATE AS
INSERT table1 (A, B, C)
SELECT A, B, C
FROM inserted;
INSERT table2 (ID, D, E, F)
SELECT ID, D, E, F
FROM table1 AS t
JOIN inserted AS i ON t.A = i.A AND t.B = i.B AND t.C = i.C;
GO
และอันที่จริงแล้วINSERT
คำสั่งคู่อาจทำงานได้โดยตรงในลักษณะเดียว (เช่นคุณกำลังใช้INT IDENTITY
หรือUNIQUEIDENTIFIER DEFAULT NEWID()
พิมพ์สำหรับคีย์):
INSERT table1 (A, B, C)
SELECT A, B, C
FROM MyTable;
INSERT table2 (ID, D, E, F)
SELECT ID, D, E, F
FROM table1 AS t
JOIN MyTable AS i ON t.A = i.A AND t.B = i.B AND t.C = i.C;
ปฏิเสธความต้องการมุมมองและทริกเกอร์อย่างสมบูรณ์แม้ว่านี่จะเป็นการดำเนินการที่คุณจะทำงานบ่อยในโค้ดของคุณมุมมอง + ทริกเกอร์จะยังคงคุ้มค่าหากพิจารณาว่าจำเป็นต้องมีงบหลายชุดในแต่ละครั้ง
ถ้ำ: SQL ข้างต้นทั้งหมดได้รับการพิมพ์จากความคิดและไม่ได้ทดสอบมันจะต้องทำงานก่อนที่จะมีการรับประกันใด ๆ ว่ามันจะทำงานตามที่คุณต้องการ