使用最后插入的标识值插入另一个 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)
我遇到这个奇怪的问题,花了好几个小时。小帮助将不胜感激。 这是一个 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)