如何从主键获取生成的ID,然后通过SCOPE_IDENTITY将其添加到ASP.NET中的另一个表? 例如:
列NRRENDOR上的最后生成的ID是26,我删除了行。现在,当我向数据库添加数据时,NRRENDOR上的nexy生成的ID将是27号。我希望它添加到NRD列。
答案 0 :(得分:1)
在INSERT
代码中,假设它在存储过程中,使用SCOPE_IDENTITY
将获得插入的最后一个标识,您可以在存储过程中重复使用或返回到您的应用程序以在另一个声明中使用。
要演示的一些虚拟SQL:
INSERT INTO NRRENDOR(SomeColumn) VALUES(1)
DECLARE @LastID int
// set @LastID to the last id inserted
SELECT @LastID = SCOPE_IDENTITY()
// to use in same procedure
INSERT INTO NRD (SomeColumn) VALUES(@LastID)
// to return it to code - or you could use an output parameter
SELECT @LastID
答案 1 :(得分:0)
这与ASP.NET有什么关系? SQL就足够了。
INSERT INTO [Table2]( NRD)
SELECT MAX(NRRENDOR)
FROM Table1
' WITH (ROWLOCK, XLOCK, HOLDLOCK)
执行此操作的正确方法是在执行Tanner suggested插入后使用@SCOPE_IDENTITY。值得注意的是,还有另一种获取当前身份的方法,即IDENT_CURRENT。你可以像这样使用它
SELECT IDENT_CURRENT('Table1') + 1 as Current_Identity
请注意这一点
使用IDENT_CURRENT预测下一次生成时要小心 身份价值。实际生成的值可能不同于 IDENT_CURRENT加上IDENT_INCR,因为其他人执行了插入操作 会话。
来自marc_s的评论总结了这一切。 How to get the next identity value from SQL Server