关于在程序上处理SQLSERVER的事务有关问题
关于在程序上处理SQLSERVER的事务问题
表A
(
aID int 主键自增
aName varchar(10)
)
表B
(
bID int 主键自增
aID int 指向表A的aID
bAge int
)
表A与表B 是1对1关系。
那么程序上实现的需要,
开始一个事务,向表A插入记录,我查询得表A中插入结果,再向表B中插入记录。
两表都插入成功后,提交事务。
但在向表A插入记录后,事务未提交,是无法查询到该记录的自增ID是多少的。所以程序一直停在那里,直到超时。
请教各位大虾应该怎么处理呢?
我用的是sql2008 .net 3.5。
------解决方案--------------------
表A
(
aID int 主键自增
aName varchar(10)
)
表B
(
bID int 主键自增
aID int 指向表A的aID
bAge int
)
表A与表B 是1对1关系。
那么程序上实现的需要,
开始一个事务,向表A插入记录,我查询得表A中插入结果,再向表B中插入记录。
两表都插入成功后,提交事务。
但在向表A插入记录后,事务未提交,是无法查询到该记录的自增ID是多少的。所以程序一直停在那里,直到超时。
请教各位大虾应该怎么处理呢?
我用的是sql2008 .net 3.5。
------解决方案--------------------
- SQL code
if object_id('A') is not null drop table A if object_id('B') is not null drop table B create table A( aID int identity(1,1), aName varchar(10) ) go create table B( bID int identity(1,1), aID int , bAge int ) go begin tran insert into A select 'Name1'; insert into B select @@IDENTITY,20 --or insert into B select IDENT_CURRENT('A'),20 --or insert into B select SCOPE_IDENTITY(),20 commit tran select * from A select * from B
------解决方案--------------------
建议把事务写在存储过程里,而非用ADO.net的控件控制.
------解决方案--------------------
这类的工作用触发器实现最简单