0

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

存储过程如下所示

 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 返回最后插入的 id)。但是,当用户界面(通过 razor 页面)创建员工时,会在福利表中插入一个 NULL 作为 EmployeeID。员工表显示正确的员工 ID。

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

4

1 回答 1

1

我认为问题出在“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)
于 2021-03-02T03:37:37.937 回答