C# 获取最后生成的ID并将其添加到另一个表ASP.NET

C# 获取最后生成的ID并将其添加到另一个表ASP.NET,c#,sql,sql-server,C#,Sql,Sql Server,如何从主键获取生成的ID,然后通过SCOPE_IDENTITY将其添加到ASP.NET中的另一个表中? 例如: NRRENDOR列上最后生成的ID是26号,我已经删除了这些行。现在,当我向数据库添加数据时,NRRENDOR上的nexy生成的ID将是27号。我希望它添加到NRD列。在您的插入代码中,假设它在存储过程中,使用SCOPE\u IDENTITY将获得插入的最后一个标识,您可以在存储过程中重用该标识,也可以返回应用程序以在另一条语句中使用 要演示的一些虚拟SQL: INSERT INT

如何从主键获取生成的ID,然后通过SCOPE_IDENTITY将其添加到ASP.NET中的另一个表中? 例如:


NRRENDOR列上最后生成的ID是26号,我已经删除了这些行。现在,当我向数据库添加数据时,NRRENDOR上的nexy生成的ID将是27号。我希望它添加到NRD列。

在您的
插入
代码中,假设它在存储过程中,使用
SCOPE\u 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

这与ASP.NET有什么关系?SQL就足够了

INSERT INTO [Table2]( NRD)
SELECT  MAX(NRRENDOR)
FROM    Table1
' WITH (ROWLOCK, XLOCK, HOLDLOCK)

正确的方法是在执行插入操作后使用@SCOPE\u IDENTITY。值得注意的是,还有另一种获取当前身份的方法,即。你可以这样使用它

SELECT IDENT_CURRENT('Table1') + 1 as Current_Identity
请注意这一点

使用IDENT_CURRENT预测下一个生成的 身份价值。实际生成的值可能不同于 当前标识加上其他用户执行的插入导致的标识增加 会议


marc_的评论总结了这一切

这与asp.net无关(或者我错了?)您所说的
将其添加到asp.net中的另一个表中是什么意思?你试过什么代码?你试过这里描述的方法吗@Aristos,我正在ASP.NET中编写代码,所以您可以帮助我在SQL Server中编写代码。@Nitin Sawant,NRRENDOR列在表1中,NRD列在表2中。表1中nRendor最后生成的ID是26号,下一个生成的ID是27号。27号我想把它添加到表2中的NRD列,它是主键。若一个主键的最大数量是25,而最后生成的ID是30,那个么它会给我25而不是30。@aldoblack:那个么你们的PK不是自动的?我根据“从主键生成的ID”假设是这样的。如果它是自动生成的,那么最后一个id将是最大id,前提是您没有使用负标识种子。是的,它是自动生成的。但有时我会删除该行。例如,我删除了表中的最后5行,所以主键减少了5。假设我的主键的最大数目是30。但如果我删除最后5行,则最大值为25。但我不想要25号。我想要最后生成的ID,即数字30。@您的插入是否有效(添加新行)以及主键列是否也被设置为标识列?是主键列被设置为标识列。它可以工作,但添加为NULL,而不是最后生成的ID。