有时仅将生成的标识用于同一插入中的另一列

时间:2018-06-22 07:27:57

标签: sql sql-server

所有类似的问题都提出了将一列完整复制到另一列的解决方案,但这不是我的要求。

基本上,我要说的是雇员,同时我还可以选择使他们成为(新团队的)团队负责人。 有一个Teamlead ID列,用于存储每个员工的Teamlead的员工ID。

因此,在添加将要成为团队负责人的员工时,其“团队领导”列应包含他刚刚生成的员工ID。

是否可以一次插入?有人说值的生成是在执行插入之后完成的。我不确定如何进行。

编辑:我没有一个插入的作品。现在,我要像这样插入和更新:

declare @TLID int
CREATE TABLE employees (
    Id int NOT NULL IDENTITY (1, 1),
    Name varchar(255),
    TeamLeadID int
);

if(@isTeamLead=1) --stored procedure parameter
begin
insert into employees(name)
values('Mark')
select @TLID=SCOPE_IDENTITY()
update employees set TeamLeadID=@TLID where id=@TLID
end
else 
begin
insert into employees(name,TeamLeadID)
values('Mark',16)
end

想知道单个插入是否可以在第一种情况下工作。

1 个答案:

答案 0 :(得分:4)

没有,您不能一次插入。

您需要先进行插入,然后再更新回同一行,以将其他列值设置回刚插入的IDENTITY列值。

但是您可以使用其他一些方法。

您可以使用序列而不是标识。然后,您将在插入之前知道该值,并且可以在两列中简单地使用它。

或者,对于团队领导的员工,您只需在NULL列中输入teamleadid。并可能使用ISNULL(teamleadid, id)作为计算列或在SELECT时计算结果。