2016-02-23 2 views
0

У меня есть 3 стола, студент, учитель & StudentTeacher.Как одновременно вставлять значения в таблицу из двух вставок, используя предложение OUTPUT

Student - StudentId, имя

Учитель - TeacherId, имя

StudentTeacher - ID, StudentId, TeacherId

Я вставив кучу данных в Универсиаде & столы для учителей, и мне нужно чтобы захватить два идентификатора, которые являются одновременно полями 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') 

Но это не загружается в то же время, так что я получаю несколько строк, один с studentid, один с teacherid. Как я могу загрузить их одновременно?

+0

У вас нет. У вас не может быть двух разных утверждений. Как вы знаете, что эти строки должны быть одной и той же строки? –

ответ

2

Я бы справился с этим требованием с помощью промежуточных переменных таблицы (или временных таблиц), которые имеют столбцы IDENTITY, а затем используйте идентификаторы для сопряжения студентов с учителями.

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 
+0

По какой-то причине столбец-учитель продолжал вставлять в таблицу ученика, в обратном направлении, которая отбрасывала все. Я добавил столбец с меньшим значением в исходную таблицу, и как таблицы ученика, так и учителя, затем использовали это как соединение, которое сработало, спасибо. – BattlFrog

0

Вы можете только INSERT в один стол за раз, так что вы можете захватить только одну таблицу стоимостью OUTPUT значений за раз.

Вам нужно будет зафиксировать значения StudentID и TeacherID и соединить их вместе каким-либо другим способом перед созданием записи (ов) StudentTeacher.

Смежные вопросы