2016-08-09 10 views
1

предварить, что я должен сделать объемную вставку в patients таблице, которая выглядит примерно так:Возвратившись идентичностью после вставки, а затем, используя значение идентификатора в другой вставке

pid  | FirstName  | LastName 
------------------------------------------- 
10  | John    | Cena 
11  | Eric    | Bischoff 
12  | Vince   | Russo 

вставка заявление Моего выглядит примерно так:

INSERT INTO patients (FirstName, LastName) 
OUTPUT inserted.pid 
VALUES ('Seth', Rollins'); 

Это возвращает последние pid, но как бы использовать это возвращенное удостоверение в другой инструкции insert в совершенно другой таблице?

INSERT INTO booking (pid, start, end) 
VALUES (inserted.pid, 'XX/XX/XXXX', XX/XX/XXXX'); 

IE:

booking_id | pid | start  | end 
----------------------------------------- 
1   | 10 | 08/01/2016 | NULL 
2   | 11 | 07/25/2016 | 07/26/2016 

Я перекручивание через большой CSV-файл с первой и последней информации о названии.

+0

Если вы только вставив один значение за раз, когда вы можете использовать Scope_Identity(), чтобы получить последнее значение идентификатора. https://msdn.microsoft.com/en-us/library/ms190315.aspx – Phritzy

+0

Возможный дубликат [Лучший способ получить личность вставленной строки?] (http://stackoverflow.com/questions/42648/best-way -to-get-identity-of-insert-row) – techspider

ответ

1

Если вы не хотите использовать SCOPE_IDENTITY(), вы можете использовать следующий синтаксис:

DECLARE @out TABLE (pid int); 

INSERT INTO patients (FirstName, LastName) 
OUTPUT inserted.pid INTO @out 
VALUES ('Seth', 'Rollins'); 

INSERT INTO booking (pid, start, end) 
VALUES ((SELECT TOP 1 pid FROM @out), 'XX/XX/XXXX', 'XX/XX/XXXX'); 
+0

Спасибо @Pawel Dyl, но ваше решение возвращает этот результат: Вложенный оператор INSERT, UPDATE, DELETE или MERGE не разрешен в инструкции SELECT, которая не является непосредственный источник строк для инструкции INSERT. Msg 137, уровень 15, состояние 2, строка 25 Должен объявить скалярную переменную "@lastPid". – etm124

+0

Я слегка отредактировал для удаления ошибки. –

0

Наиболее метод transtworthy будет:

declare @ID table (ID int) 
declare @someInt int 

INSERT INTO patients (FirstName, LastName) 
OUTPUT inserted.pid into into @ID 
VALUES ('Seth', 'Rollins'); 

SELECT @someInt = ID FROM @ID 

INSERT INTO booking (pid, start, end) 
VALUES (@someInt , 'XX/XX/XXXX', XX/XX/XXXX');