在带有事务的c#中,将记录插入相互依赖的多个表中
本文关键字:依赖 插入 事务 记录 | 更新日期: 2023-09-27 18:28:01
我是C#的新手
我有两张桌子:员工表(E_id(PK)、first_name、Last_name、地址、DOB、电子邮件)BankDetail表(Id(PK)、bank_name、Acc_no、E_Id(FK))
两个PK都是自动递增的。
现在的问题是,我需要同时插入这两个表的数据。但如果员工Id(E-Id)在递增期间生成,那么我将如何在同一操作中将该值输入BankDetails E_Id。为了数据库的完整性,我还需要在这里使用Transaction。
有人能简单地解释一下吗?提前谢谢。
我认为实现这一点的最佳方法是将操作封装在存储过程中。您可以使用SCOPE_IDENTITY获取先前添加的记录的ID,并使用TRY-CATCH确保执行两个插入查询或根本不执行。
BEGIN TRANSACTION;
BEGIN TRY
INSERT INTO Employee (first_name, Last_name, Address, DOB, Email)
VALUES (@fname, @lame, ... etc)
-- Get the last identity value inserted into an identity column in the same scope
SET @E_Id = SCOPE_IDENTITY();
INSERT INTO BankDetail(bank_name, Acc_no, E_id)
VALUES (@bname, @ano, @E_id)
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
END CATCH;
IF @@TRANCOUNT > 0
COMMIT TRANSACTION;