B(成绩表)
其中A表中ID为主键关联B表MAINID
通过程序,向A表中插入(1,'张三')循环向B表插入(1,'语文','70')(1,'数学,'80')(1,'物理,'90')
如果任何一次出现异常,则回滚。
9 个解决方案
#1
use tempdb
go
declare @A table
(
id int,
name nvarchar(50)
)
declare @B table
(
mainID int,
major nvarchar(10),
score real
)
begin transaction tran1 --事务一演示插入一条学生record及对应的成绩信息
insert into @A values(1,'张三')
if @@ROWCOUNT=0
rollback transaction tran1
insert into @B
select 1,'语文',70
union
select 1,'数学',80
union
select 1,'物理',90
if @@ROWCOUNT=0
rollback transaction tran1
commit transaction tran1 --提交事务
select a.*,b.*
from @A a
join @B b on a.id=b.mainID
程序里面也有事务处理机制,看楼主是把事务处理放在application里面还是database里面了。
#2
use tempdb
go
declare @A table
(
id int,
name nvarchar(50)
)
declare @B table
(
mainID int,
major nvarchar(10),
score real
)
begin transaction tran1 --事务一演示插入一条学生record及对应的成绩信息
begin try
insert into @A values(1,'张三')
insert into @B
select 1,'语文',70
union
select 1,'数学',80
union
select 1,'物理',90
commit transaction tran1 --提交事务
end try
begin catch
rollback transaction tran1
end catch
select a.*,b.*
from @A a
join @B b on a.id=b.mainID
修改一下代码,还是使用try...catch保险些
#3
+1
#4
SET XACT_ABORT ON
begin tran
insert into A
select 1,'张三'
insert into B
select 1,'语文',70
union all
select 1,'数学',80
union all
select 1,'物理',90
commit tran
#5
路过,学习
#6
可能我表述的不清楚
我意思是:
新建一个学生 张三
同时把张三的成绩记录下来,
张三的成绩可能是只有一个语文分数,也可能是十几门科目成绩
如:语文 60分;数学70分;英语80分;物理90分。。。。等等
我想在数据库中使用事务
程序中思路是
事务
插入表A张三取ID
循环读取程序
插入B表科目成绩MAINID=A.ID 科目 成绩
如果出错 事务回滚
事务结束
我意思是:
新建一个学生 张三
同时把张三的成绩记录下来,
张三的成绩可能是只有一个语文分数,也可能是十几门科目成绩
如:语文 60分;数学70分;英语80分;物理90分。。。。等等
我想在数据库中使用事务
程序中思路是
事务
插入表A张三取ID
循环读取程序
插入B表科目成绩MAINID=A.ID 科目 成绩
如果出错 事务回滚
事务结束
#7
循环向B表插入??
那要插入多少次呢?
那要插入多少次呢?
#8
又没区别的,总之都在begin tran和commit tran之间
中间写你的逻辑,要写什么随你,跟我们又不搭嘎的
中间写你的逻辑,要写什么随你,跟我们又不搭嘎的
#9
SET XACT_ABORT ON
declare @id int
begin tran
insert into A
output inserted.id into #t
select 1,'张三'
select @id=ID from #t
insert into B
select @id,'语文',70
union all
select @id,'数学',80
union all
select @id,'物理',90
commit tran
#1
use tempdb
go
declare @A table
(
id int,
name nvarchar(50)
)
declare @B table
(
mainID int,
major nvarchar(10),
score real
)
begin transaction tran1 --事务一演示插入一条学生record及对应的成绩信息
insert into @A values(1,'张三')
if @@ROWCOUNT=0
rollback transaction tran1
insert into @B
select 1,'语文',70
union
select 1,'数学',80
union
select 1,'物理',90
if @@ROWCOUNT=0
rollback transaction tran1
commit transaction tran1 --提交事务
select a.*,b.*
from @A a
join @B b on a.id=b.mainID
程序里面也有事务处理机制,看楼主是把事务处理放在application里面还是database里面了。
#2
use tempdb
go
declare @A table
(
id int,
name nvarchar(50)
)
declare @B table
(
mainID int,
major nvarchar(10),
score real
)
begin transaction tran1 --事务一演示插入一条学生record及对应的成绩信息
begin try
insert into @A values(1,'张三')
insert into @B
select 1,'语文',70
union
select 1,'数学',80
union
select 1,'物理',90
commit transaction tran1 --提交事务
end try
begin catch
rollback transaction tran1
end catch
select a.*,b.*
from @A a
join @B b on a.id=b.mainID
修改一下代码,还是使用try...catch保险些
#3
+1
#4
SET XACT_ABORT ON
begin tran
insert into A
select 1,'张三'
insert into B
select 1,'语文',70
union all
select 1,'数学',80
union all
select 1,'物理',90
commit tran
#5
路过,学习
#6
可能我表述的不清楚
我意思是:
新建一个学生 张三
同时把张三的成绩记录下来,
张三的成绩可能是只有一个语文分数,也可能是十几门科目成绩
如:语文 60分;数学70分;英语80分;物理90分。。。。等等
我想在数据库中使用事务
程序中思路是
事务
插入表A张三取ID
循环读取程序
插入B表科目成绩MAINID=A.ID 科目 成绩
如果出错 事务回滚
事务结束
我意思是:
新建一个学生 张三
同时把张三的成绩记录下来,
张三的成绩可能是只有一个语文分数,也可能是十几门科目成绩
如:语文 60分;数学70分;英语80分;物理90分。。。。等等
我想在数据库中使用事务
程序中思路是
事务
插入表A张三取ID
循环读取程序
插入B表科目成绩MAINID=A.ID 科目 成绩
如果出错 事务回滚
事务结束
#7
循环向B表插入??
那要插入多少次呢?
那要插入多少次呢?
#8
又没区别的,总之都在begin tran和commit tran之间
中间写你的逻辑,要写什么随你,跟我们又不搭嘎的
中间写你的逻辑,要写什么随你,跟我们又不搭嘎的
#9
SET XACT_ABORT ON
declare @id int
begin tran
insert into A
output inserted.id into #t
select 1,'张三'
select @id=ID from #t
insert into B
select @id,'语文',70
union all
select @id,'数学',80
union all
select @id,'物理',90
commit tran