如何使用OUTPUT子句从两个插入中同时将值插入表中

时间:2016-02-23 16:28:20

标签: sql sql-server

我有3张桌子,学生,老师和StudentTeacher。

学生 - StudentId,姓名

老师 - TeacherId,姓名

StudentTeacher - ID,StudentId,TeacherId

我正在将一堆数据插入Student&教师表,我需要获取两个ID,它们都是IDENTITY字段,并将它们插入到StudentTeacher表中。我试过这个:

INSERT INTO Student (Name)
OUTPUT Inserted.StudId INTO dbo.StudentTeacher (StudentId)
VALUES ('Jimmy'), ('Bobby'), ('Nanacy'), ('Suzie')

INSERT INTO Teacher(Name)
OUTPUT Inserted.TeachId INTO dbo.StudentTeacher (TeacherId)
VALUES ('Mr Jim'), ('Mr Bob'), ('Ms Nancy'), ('Ms Suzie')

但是这并没有同时加载,所以我得到了多行,一行有一个studentntid,一行有一个老师。如何让它们同时加载?

2 个答案:

答案 0 :(得分:2)

我会使用具有IDENTITY列的中间表变量(或临时表)处理此要求,然后使用IDENTITIES将学生与教师配对。

DECLARE @T TABLE (id int IDENTITY(1,1), TeacherId int)
DECLARE @S TABLE (id int IDENTITY(1,1), StudentId int)

INSERT INTO Student (Name)
OUTPUT Inserted.StudId INTO @S (StudentId)
VALUES ('Jimmy'), ('Bobby'), ('Nanacy'), ('Suzie')

INSERT INTO Teacher(Name)
OUTPUT Inserted.TeachId INTO @T (TeacherId)
VALUES ('Mr Jim'), ('Mr Bob'), ('Ms Nancy'), ('Ms Suzie')

INSERT INTO StudentTeacher (StudentId, TeacherId)
SELECT StudentId, TeacherId
FROM @S s
FULL OUTER JOIN @T t
 ON s.id=t.id

答案 1 :(得分:0)

您一次只能INSERT进入一个表格,因此您一次只能捕获一个表格中OUTPUT个值。

在创建StudentTeacher记录之前,您需要捕获StudentID和TeacherID值并将它们以其他方式配对。