2015-11-09 64 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文件,該文件的第一步是導入進口數據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) 

我的問題是如何從表SOPGroups基於匹配從獨特SOP_Title的SOP_Group名插入到表[SOPTitle],並得到SOPGroupID臨時表'Onthology返回$'。

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

回答

0

您可以使用組名之間的連接來獲取組ID。

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我們可以使用SOP_Group的INNER JOIN此表並導入的表之間。這將返回所有與插入SOP_Groups的SOP_Titles和大家各自SOPGroupIDs從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_Group多個SOP_Title值。