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

Sql server sqlserver将最后插入的Id分配给一个查询中的另一列,sql-server,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') UPDAT

执行此查询时

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
在一个insert查询中是否有这样做的方法(将插入的id分配给另一列而不使用该列中的idendity属性)


非常感谢。

您想让它成为如下所示的计算列吗

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');
这将导致

这里有小提琴演示吗

编辑:


如果无法更改表结构,则将ID值插入ID2列的唯一方法是您当前的操作方式,因为在同一insert语句中,标识值仍然不可用,因此将为空。

谢谢,但这不是我的表(实际数据库)(不是我的应用程序),因此我无法更改表定义。我只想将数据插入数据库。@ttn,如果有帮助,请不要忘记将其标记为答案(通过单击投票按钮下方的复选按钮)。非常感谢,我们可以说我们不能在插入中使用选择范围标识吗query@ttn是的,这正是我的意思。