sqlserver将最后插入的Id分配给一个查询中的另一列

时间:2014-05-03 19:40:52

标签: sql-server

执行此查询时

DECLARE @Temp TABLE (ID INT IDENTITY,Name VARCHAR(50),ID2 INT NULL)
INSERT INTO @Temp ([Name]) VALUES ('Ali')
UPDATE @Temp SET ID2= (SELECT SCOPE_IDENTITY()) WHERE [ID]=(SELECT SCOPE_IDENTITY())
INSERT INTO @Temp ([Name]) VALUES ('Veli')
UPDATE @Temp SET ID2= (SELECT SCOPE_IDENTITY()) WHERE [ID]=(SELECT SCOPE_IDENTITY())
SELECT * FROM @Temp

我们可以得到这张表

ID-NAME-ID2
1 - Ali - 1
2 - Veli - 2

有没有办法在一个插入查询中执行此操作(将插入的id分配给另一列而不使用该列中的idendity属性)?

非常感谢。

1 个答案:

答案 0 :(得分:0)

您希望将其设为如下所示的计算列

create TABLE Temp(ID INT IDENTITY,Name 
                  VARCHAR(50),
                  ID2 AS ID PERSISTED);

然后插入行...您的ID值将保留在ID2列

INSERT INTO Temp ([Name]) 
VALUES ('Ali');

INSERT INTO Temp ([Name]) 

VALUES ('Veli');

INSERT INTO Temp ([Name]) 

VALUES ('Neli');

将导致

enter image description here

在此处查看演示小提琴http://sqlfiddle.com/#!3/59fca/1

修改

如果您无法更改表结构,那么将ID值插入ID2列的唯一方法就是您当前正在执行此操作的方式导致同一个insert语句中的标识值仍然不可用,因此它将为null