日期:2014-05-18  浏览次数:20453 次

关于在程序上处理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。


------解决方案--------------------
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的控件控制.

------解决方案--------------------
这类的工作用触发器实现最简单