ms SQL2000中,问一个事务与触发器的问题.急....
时间:2011-12-21
来源:互联网
proadd.asp的主要代码如下: on error resume next conn.BeginTrans for i =1 to 10 pid=request.form("proid"&i) num=request.form("num"&i) sql="insert into prolist(pid,account) values('"&pid&"','"&num&"')" conn.execute(sql) end if if conn.Errors.Count=0 then conn.CommitTrans response.write "成功更新。" else conn.RollbackTrans call alert("执行操作时出错,请重新尝试!") end if ------------------------------------------------- ms sql2000中,表prolist的字段如下:用于记得每次进仓,出仓的明细记录的: id pid(即是产品ID号) account -------------------------------------------------- 库存表proall的字段如下: pid allaccount -------------------------------------------------- 我想要个触发器,实现每次向表prolist插入数据时,将通过prolist的触发器将数量account累加到proall表中。 如果程序文件proadd.asp不是用事务的话,触发器大伙都知怎么编写的,就如下: CREATE TRIGGER [prolist_add] ON dbo.prolist FOR INSERT AS begin declare @pid numeric(10) declare @account numeric(10) select @pid=pid,@account=account from inserted update proall set allaccount=allaccount + @account where pid=@pid end 我想问的是,程序文件proadd.asp用了事务的话,上面这个触发器就只会最后一次insert记录进行更新, 而前面的是没有更新表proall的allaccount的, 那请问,这个触发器怎么写呢?在线等。。。。。。。
作者: rings2000 发布时间: 2011-12-21
作者: fredrickhu 发布时间: 2011-12-21
而前面的是没有更新表proall的allaccount的
作者: rings2000 发布时间: 2011-12-21
作者: rings2000 发布时间: 2011-12-21
insert语句其实是开启了一个隐性事务,而触发器和insert都属于这个事务里的吧
作者: pengxuan 发布时间: 2011-12-21
proadd.asp的主要代码如下:
on error resume next
conn.BeginTrans
for i =1 to 10
pid=request.form("proid"&i)
num=request.form("num"&i)
sql="insert into prolist(pid,account) values('"&pid&"','"&num&"')"
conn.execute(sql)
end if
if conn.Errors.Count=0 then
conn.CommitTrans
response.write "成功更新。"
else
conn.RollbackTrans
call alert("执行操作时出错,请重新尝试!")
end if
如果我程序代码为以下的,是没有问题的:
proadd.asp的主要代码如下:
for i =1 to 10
pid=request.form("proid"&i)
num=request.form("num"&i)
sql="insert into prolist(pid,account) values('"&pid&"','"&num&"')"
conn.execute(sql)
end if
但是这样的代码,有可能会造成提交的数据保存不完整,有可能只是插入了前面几条数据的,所以用事务conn.BeginTrans ,conn.CommitTrans
的.这样要么全部保存10条,要么,就一条也保存不了的.提示"执行操作时出错,请重新尝试".
作者: rings2000 发布时间: 2011-12-21
作者: rings2000 发布时间: 2011-12-21
FOR INSERT
AS
begin
update proall set allaccount=allaccount + inserted.account from proall,inserted where proall.pid=inserted.pid
end
上面这个UPDATE,语法对吗?可以from proall,inserted 的吗?
作者: rings2000 发布时间: 2011-12-21
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28