2015-11-09 13 views
0

У меня есть две таблицы в SQL Server, как следует, которые связаны между собой через FK SOPGroupsID: -Копирование данных из одной таблицы в другую

CREATE TABLE [dbo].[SOPGroups](
    [SOPGroupsID]  smallint NOT NULL IDENTITY(1,1), 
    [SOP_Group]   varchar(200) NOT NULL UNIQUE, 
    PRIMARY KEY CLUSTERED (SOPGroupsID)); 
    GO 

    CREATE TABLE [dbo].[SOPTitle](
    [SOPGroupsID] smallint DEFAULT 1 NOT NULL, 
    [SOPTitleID] smallint NOT NULL IDENTITY(1, 1), 
    [SOP_Title] varchar(300) NOT NULL UNIQUE, 
    PRIMARY KEY CLUSTERED (SOPTitleID)); 
    GO 
    --add relationship between tables SOPGroups and SOPTitle 
    ALTER TABLE [dbo].[SOPTitle] ADD CONSTRAINT [R1] FOREIGN KEY(SOPGroupsID) 
    REFERENCES [dbo].[SOPGroups] (SOPGroupsID) 
    ON UPDATE Cascade 
    ON DELETE Set default; 
    GO 

Я импортировать данные из файла первенствовать которых первый шаг является импортировать excel файл во временную таблицу на SQL-сервере, а затем импортировать данные в приведенные выше таблицы, удаляя повторяющиеся записи. Я вставляю SOP группы данных следующим образом в таблице SOPGroups: -

INSERT INTO [dbo].[SOPGroups] (SOP_Group) 
     SELECT DISTINCT SOP_Group FROM [dbo].['Onthology Return$'] t 
     WHERE NOT EXISTS 
      (SELECT SOP_Group FROM [dbo].[SOPGroups] x WHERE x.SOP_Group = t.SOP_Group) 

Моя проблема заключается в том, как вставить в таблицу [SOPTitle] и получить SOPGroupID из таблицы SOPGroups на основе имени SOP_Group, согласованное с отчетливым SOP_Title от временная таблица 'Onthology Return $'.

INSERT INTO [dbo].[SOPTitle] (SOPGroupsID, SOP_Title) 
    SELECT DISTINCT SOP_Group, SOP_Title FROM [dbo].['Onthology Return$'] t 

ответ

0

Вы можете получить идентификатор группы, используя объединение между именами групп.

INSERT INTO [dbo].[SOPTitle] (SOPGroupsID, SOP_Title) 
SELECT DISTINCT g.SOPGroupsID, t.SOP_Title 
FROM [dbo].['Onthology Return$'] t 
INNER JOIN [dbo].[SOPGroups] g ON t.SOP_Group = g.SOP_Group 
0

Поскольку новые значения SOP_Group были вставлены в SOPGroups мы можем использовать INNER JOIN на SOP_Group между этой таблицей и импортируемой таблицы. Это вернет все SOP_Titles, относящиеся к вставленным SOP_Groups, и мы возьмем их соответствующие SOPGroupID из таблицы SOPGroups.

INSERT INTO [dbo].[SOPTitle] (SOPGroupsID, SOP_Title) 
SELECT DISTINCT g.SOPGroupsID, t.SOP_Title 
FROM [dbo].['Onthology Return$'] t 
INNER JOIN [dbo].[SOPGroups] g ON t.SOP_Group = g.SOP_Group 

Как предостережение, то SELECT DISTINCT утверждение по-разному работает на второй вставки, так как это позволяет несколько значений SOP_Title быть вставлены для каждого SOP_Group.

Смежные вопросы