使用最后插入的标识值插入另一个 table

Using last identity inserted value to insert in another table

我遇到这个奇怪的问题,花了好几个小时。小帮助将不胜感激。 这是一个 ASP.NET MVC 应用程序。为简单起见,我有两个 SQL table,Employee (ID, Name, JoiningDate) 和 Benefits (ID, EmployeeID)。两个 ID 都是身份列。当新员工加入公司时,将在员工 table 和福利 table.

中创建一个条目

存储过程如下所示

 alter procedure usp_CreateEmployee
 @Name nvarchar(100),
 @JoiningDate datetime
 as
 declare @lastIdentity int
 insert into Employee(Name, JoiningDate) values(@Name, @JoiningDate)
 select @lastIdentity = ident_current('Employee')
 insert into Benefits(EmployeeID) values(@lastIdentity)

C# 端我正在使用 Dapper

 var parameters = new DynamicParameters();
 parameters.Add("@Name", name);
 parameters.Add("@JoiningDate", joiningDate);
 affectedRows = connection.Execute("usp_CreateEmployee", parameters, null, commandType: CommandType.StoredProcedure);

当我在 SSMS 中执行存储过程时,一切正常。 (ident_current returns 最后插入的 id)。但是,当用户界面创建员工(通过 razor 页面)时,将在 Benefits table 中插入一个 NULL 作为 EmployeeID。员工 table 显示正确的员工 ID。

看起来不像是 SQL 问题。我的代码有什么问题吗?这可能与 Dapper 相关(虽然我不这么认为)?

我认为问题出在“ident_current”上。请参考这里:https://sqlperformance.com/2014/01/t-sql-queries/ident-current

或者,您可以尝试下面的 sql 脚本。

alter procedure usp_CreateEmployee
 @Name nvarchar(100),
 @JoiningDate datetime
 as
 declare @lastIdentity int
 insert into Employee(Name, JoiningDate) values(@Name, @JoiningDate)
 select top(1) @lastIdentity=ID from Employee where Name=@Name
 order by ID desc
  
 insert into Benefits(EmployeeID) values(@lastIdentity)