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

Sql server 将数据从一个表复制到另一个表,sql-server,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 CREAT

我在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组数据插入表SOP组,如下所示:-

    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]中插入,并根据与临时表“Ontology Return$”中不同SOP\U标题匹配的SOP\U组名称从表SOPGroups中获取SOPGroupID

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

您可以使用组名称之间的联接来获取组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

当新的SOP_组值插入到SOP组中时,我们可以在此表和导入表之间的SOP_组上使用
内部联接。这将返回与插入的SOP_组相关的所有SOP_标题,我们从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
需要注意的是,
selectdistinct
语句在第二次插入时的工作方式不同,因为它允许为每个SOP\u组插入多个SOP\u标题值