插入后返回标识,然后在另一个插入中使用标识值

时间:2016-08-09 18:21:01

标签: sql-server insert sql-server-2014 identity

作为序言,我必须在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文件。

2 个答案:

答案 0 :(得分: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');

答案 1 :(得分:0)

最可转换的方法是:

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');