将数据从一个表复制到另一个表

时间:2015-11-09 21:14:06

标签: sql-server

我在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 Server中的临时表,然后将数据导入上面的表中,删除重复的条目。我按如下方式将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]并根据与临时表'Onthology Return $'中的不同SOP_Title匹配的SOP_Group名称从表SOPGroups获取SOPGroupID。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

当新的SOP_Group值插入SOPGroups时,我们可以在此表和导入的表之间的SOP_Group上使用INNER JOIN。这将返回与插入的SOP_Groups相关的所有SOP_Titles,并从SOPGroups表中获取它们各自的SOPGroupID。

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值。