如何解决使用最后一个身份插入值插入另一个表
我正面临这个奇怪的问题并花了几个小时。一点帮助将不胜感激。 这是一个 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 举报,一经查实,本站将立刻删除。