Вам необходимо создать еще одну таблицу, которая будет использоваться для целей подготовки, которая будет собирать данные из веб-формы, которую вы разрабатываете. И обрезать каждый раз для отправки новой формы. Промежуточная таблица будет состоять из всех столбцов, необходимых для заполнения всех трех таблиц. Если посмотреть на существующие столбцы, промежуточная таблица будет выглядеть так, как будто в ней есть следующие столбцы:
CREATE TABLE LoadUnitsStg(
StagingID UNIQUEIDENTIFIER NOT NULL PRIMARY KEY DEFAULT NEWID(),
UoC_Code VARCHAR(50),
UoC_Title VARCHAR(200),
UoC_Descriptor VARCHAR(500),
Pre_UoC_Code VARCHAR(50),
Pre_UoC_PreReq VARCHAR(50),
Pre_Pathway VARCHAR(50),
Anc_UoC_Code VARCHAR(50),
Anc_UoC_PreReq VARCHAR(50),
Ancestor_level INT
)
Теперь загрузите данные из веб-формы в промежуточную таблицу и используйте этот запрос для заполнения данных в требуемых таблицах.
INSERT INTO Unit_Of_Competency ([UoC_Code],[UoC_Title],[Descriptor])
SELECT DISTINCT(UoC_Code),UoC_Title,UoC_Descriptor FROM LoadUnitsStg stg
WHERE UoC_Code IS NOT NULL AND NOT EXISTS (
SELECT 1 FROM Unit_Of_Competency UoC
WHERE UoC.UoC_Code=stg.UoC_Code);
INSERT INTO Prerequisite ([Pathway],[Unit_Of_Competency_ID],[Prerequisite_ID])
SELECT DISTINCT(Pre_Pathway),(Select Unit_Of_Competency_ID from Unit_Of_Competency where UoC_Code like stg.Pre_UoC_Code),(Select Unit_Of_Competency_ID as Prerequisite_ID from Unit_Of_Competency where UoC_Code like stg.Pre_UoC_PreReq) FROM LoadUnitsStg stg
WHERE Pre_Pathway IS NOT NULL AND NOT EXISTS (
SELECT 1 FROM Prerequisite Pre
WHERE Pre.Pathway=stg.Pre_Pathway);
INSERT INTO Prerequisite_Ancestor ([Ancestor_Level],[UoC_ID],[Prerequisite_ID])
SELECT DISTINCT(Ancestor_level),(Select Unit_Of_Competency_ID as UoC_ID from Unit_Of_Competency where UoC_Code like stg.Anc_UoC_Code),(Select Unit_Of_Competency_ID as Prerequisite_ID from Unit_Of_Competency where UoC_Code like stg.Anc_UoC_PreReq) FROM LoadUnitsStg stg
WHERE Ancestor_level IS NOT NULL AND NOT EXISTS (
SELECT 1 FROM Prerequisite_Ancestor Anc
WHERE Anc.Ancestor_level=stg.Ancestor_level);
После загрузки данных просто обрежьте промежуточную таблицу для следующего набора записей.
Надеюсь, это поможет вам.