如何从 Table1 插入 Table2,然后使用插入的 ID 插入 Table3

Posted

技术标签:

【中文标题】如何从 Table1 插入 Table2,然后使用插入的 ID 插入 Table3【英文标题】:How do I insert into Table2 from Table1 and then use the inserted ID to insert into Table3 【发布时间】:2015-05-26 23:07:30 【问题描述】:

我有一些存储以下数据的表,这与我实际拥有的数据不完全一样,但经过简化以便更容易解释......

表1

用户 ID (FK) 测试ID (FK) 开始时间 结束时间 问题ID1 AnswerToQuestion1 问题ID2 AnswerToQuestion2

由于 Table1 是电子表格,我想将此数据导入两个表(Table2 和 Table3)

表2

用户测试ID (PK) 用户 ID 测试ID 开始时间 结束时间

表3

用户测试ID (FK) 问题 ID (FK) AnswerID (FK)

我想做的是……

我想对 Table1 中的每一行进行以下插入。

INSERT INTO Table2
(
    UserID
    ,TestID
    ,StartTime
    ,EndTime
)
SELECT UserID
       ,TestID
       ,StartTime
       ,EndTime
FROM Table1


Declare @InsertedUserTestID INT
Set @id = SCOPE_IDENTITY()


-- Do this twice (once for Question1 and the second for Question2)
INSERT INTO Table3
(
    UserTestID
    ,QuestionID
    ,AnswerID
)
SELECT 
    @id
    ,QuestionID1
    ,AnswerToQuestion1
FROM Table1

我尝试过的

我读到我可以使用 OUTPUT 来使用插入的 ID,但它不起作用,因为它不允许我选择那些不用于插入 Table2 的列。

INSERT INTO Table2
(
    UserID
    ,TestID
    ,StartTime
    ,EndTime
)
OUTPUT Inserted.UserTestID 
INTO Table3(Inserted.UserTestID, QuestionID1, AnswerToQuestion1)
SELECT UserID
       ,TestID
       ,StartTime
       ,EndTime
FROM Table1

有什么方法可以实现吗?还是先从Table1插入Table2,再用Table1和Table2插入Table3?

【问题讨论】:

***.com/q/5365629/73226 @MartinSmith,谢谢!我会试试这个。 【参考方案1】:

Martin 是对的 - 为此使用 MERGE。如果您没有两个要插入的行条目,您可以在一个语句中完成所有操作 - 因此您可以转储到临时表并执行以下操作:

CREATE TABLE #answers (UserTestID INT, QuestionID1 INT, AnswerID1 INT, QuestionID2 INT, AnswerID2 INT);

MERGE Table2
USING 
(  
    SELECT UserID
           ,TestID
           ,StartTime
           ,EndTime
           ,QuestionID1
           ,AnswerToQuestion1
           ,QuestionID2
           ,AnswerToQuestion2
    FROM Table1
) src ON (1=0)
WHEN NOT MATCHED THEN INSERT (UserID, TestID, StartTime, EndTime)
 VALUES (src.UserID, src.TestID, src.StartTime, src.EndTime
OUTPUT Inserted.UserTestID, src.QuestionID1, src.AnswerID1, src.QuestionID2, src.AnswerID2
INTO #answers(UserTestID, QuestionID1, AnswerID1, QuestionID2, AnswerID2);

INSERT INTO Table3
(
    UserTestID
    ,QuestionID
    ,AnswerID
)
SELECT UserTestID
    ,QuestionID1
    ,AnswerID1
FROM #answers
UNION
SELECT UserTestID
    ,QuestionID2
    ,AnswerID2
FROM #answers;

【讨论】:

以上是关于如何从 Table1 插入 Table2,然后使用插入的 ID 插入 Table3的主要内容,如果未能解决你的问题,请参考以下文章

根据字段插入行

MySQL:如果 table1 中的行存在,则在 table2 上插入行

如何使用额外的列执行“插入到 select *”查询?

sqlite python 插入

插入某些列[重复]

在插入触发器上从 table1 插入到 table2