微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用最后一个身份插入值插入另一个表

如何解决使用最后一个身份插入值插入另一个表

我正面临这个奇怪的问题并花了几个小时。一点帮助将不胜感激。 这是一个 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 作为员工 ID 插入到福利表中。员工表显示正确的员工 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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。