Якщо це ви плануєте регулярно робити (тобто це частина логіки програми, а не одноразова трансформація даних), тоді ви можете використовувати погляд на 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;
заперечуючи необхідність перегляду та тригера повністю, хоча якщо це операція, яку ви будете виконувати часто у своєму коді, то вигляд тригера все-таки варто розглянути можливість кожного разу абстрагувати необхідність у декількох операторах.
CAVEAT: всі вищевказані SQL були набрані з роздумів і не перевірені, йому знадобиться робота, перш ніж є гарантія, що вона працюватиме як потрібно.