下面存储过程 怎么应用事务?

tiandike 2004-09-10 05:19:19
create proc insert_two_table
@a int,
@b int,
as

begin
insert into table1(a)values(@a)
insert into table2(b)values(@b)

end

怎样保证 两个表操作同时成功???

谢谢
...全文
161 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
intermedia 2004-09-12
  • 打赏
  • 举报
回复
看我的间单明了
create proc insert_two_table
@a int,
@b int,
as

begin
begin transaction
insert into table1(a)values(@a)
if (@@error<>0)
rollback transaction
insert into table2(b)values(@b)
if (@@error<>0)
rollback transaction

commit transaction


end
tiandike 2004-09-11
  • 打赏
  • 举报
回复
还问个问题
执行 这个存储过程如果产生erro
在外部 应用程序(比如c#)怎么得到呢?
tiandike 2004-09-11
  • 打赏
  • 举报
回复
楼上的
你最后的 rollback 总是会执行的

要改一下

不过非常感谢

create proc insert_two_table
@a int,
@b int,
as
declare @ErrNo int,@ErrMsg varchar(3000)

begin transaction tran_insert
insert into table1(a)values(@a)
if @@error>0
begin
select @ErrNo=300000,@ErrMsg='table1插入失敗...'
goto Error
end

insert into table2(b)values(@b)
if @@error>0
begin
select @ErrNo=300000,@ErrMsg='table2插入失敗...'
goto Error
end
else
goto label

Error:
begin
raiserror @errno @errmsg
RollBack transaction Tran_insert
end

label:
commint transaction Tran_insert
w_rose 2004-09-11
  • 打赏
  • 举报
回复
每一条语句都要判断@@error,这是很“烂”的编程方法,但是却被不断作为“标准作法”去宣传。难道没有人解决过它么?
jackting 2004-09-10
  • 打赏
  • 举报
回复
create proc insert_two_table
@a int,
@b int,
as
declare @ErrNo int,@ErrMsg varchar(3000)

begin transaction tran_insert
insert into table1(a)values(@a)
if @@error>0
begin
select @ErrNo=300000,@ErrMsg='table1插入失敗...'
goto Error
end

insert into table2(b)values(@b)
if @@error>0
begin
select @ErrNo=300000,@ErrMsg='table2插入失敗...'
goto Error
end
commint transaction Tran_insert
Error:
begin
raiserror @errno @errmsg
RollBack transaction Tran_insert
end

jackting 2004-09-10
  • 打赏
  • 举报
回复
create proc insert_two_table
@a int,
@b int,
as
declare @ErrNo int,@ErrMsg varchar(3000)

begin transaction tran_insert
insert into table1(a)values(@a)
insert into table2(b)values(@b)
if @@error>0
begin
select @ErrNo=300000,@ErrMsg='table2插入失敗...'
goto Error
end
commint transaction Tran_insert
Error:
begin
raiserror @errno @errmsg
RollBack transaction Tran_insert
end
arrow_gx 2004-09-10
  • 打赏
  • 举报
回复
在存储过程里面用事务进行处理
zjcxc 2004-09-10
  • 打赏
  • 举报
回复
create proc insert_two_table
@a int,
@b int,
as
set xact_abort on
begin tran
insert into table1(a)values(@a)
insert into table2(b)values(@b)
commit tran

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧