返回最后插入的ID而不使用第二个查询

Ali*_*sam 8 c# asp.net sql-server-2008

我正在使用SQL Server 2008开发一个ASP.NET项目(C#).

当我在数据库中的表中插入一行时,我想获取最后插入的ID,即表的IDENTITY(自动增量).

我不想使用其他查询,并执行类似...

SELECT MAX(ID) FROM USERS;
Run Code Online (Sandbox Code Playgroud)

因为 - 即使它只是一个查询 - 感觉很蹩脚......

当我插入一些东西时,我通常使用ExecuteNonQuery(),它返回受影响的行数.

int y = Command.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

是否有办法在不使用其他查询的情况下返回最后插入的ID

Aar*_*and 18

大多数人通过以下方式执行此操作:

INSERT dbo.Users(Username)
VALUES('my new name');

SELECT NewID = SCOPE_IDENTITY();
Run Code Online (Sandbox Code Playgroud)

(或者代替查询,将其分配给变量.)

所以这并不是对桌子的两个查询......

但是也有以下方式:

INSERT dbo.Users(Username)
OUTPUT inserted.ID
VALUES('my new name');
Run Code Online (Sandbox Code Playgroud)

但是,你无法真正找到它ExecuteNonQuery.


lev*_*nis 5

您可以将id作为输出参数从存储过程返回,例如 @userId int output

然后,插入后, SET @userId = scope_identity()

  • @TomTom无论如何,我认为给这个家伙一个-1是一个相当蹩脚的理由.仅仅因为你不喜欢存储过程并不意味着我们都应该放弃它们并跳上ORM列车,任何建议使用它的人都会为人们制造噩梦. (7认同)
  • @TomTom我不使用LINQ(我不是开发人员),但我已经为那些拥有的人做过大量的性能故障排除.我根本不是在谈论测试.你是否老实告诉我,如果DBA需要对SQL逻辑进行更改(比方说,添加索引提示,或者存在查询需要包含的架构更改),那么在C#中部署这些更改是会变得更容易吗?为什么应用程序开发人员和T-SQL作者必须是同一个人? (3认同)