事务程序与数据库触发器的问题.急....
- HTML code
proadd.asp的主要代码如下:on error resume nextconn.BeginTransfor 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 ifif 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 ASbegin declare @pid numeric(10) declare @account numeric(10) select @pid=pid,@account=account from inserted update proall set allaccount=allaccount + @account where pid=@pidend我想问的是,程序文件proadd.asp用了事务的话,上面这个触发器就只会最后一次insert记录进行更新,而前面的是没有更新表proall的allaccount的(我是一次提交10条记录的,如果用了事务,执行conn.CommitTrans后,只会对第10次的insert记录进行触发,将数量更新到proall表中,而前面9次的没有更新的)那请问,这个触发器怎么写呢?在线等。。。。。。。[解决办法]
MS SQL存储过程
Create proc sp_join
@result int output,
@email nvarchar(30),
@username nvarchar(15)
AS
-- 开始事务
Begin Tran
INSERT INTO users(username, email) VALUES(@username, @email)
IF @@ERROR <> 0 GOTO back
INSERT INTO register(username) VALUES(@userName)
IF @@ERROR <> 0 GOTO back
-- 提交事务
Set @result = 1
Commit Tran
Return
-- 回滚事务
back:
Set @result = 0
RollBack Tran
Return
数据库连接代码
Sub Command(oCmd)
Set oCmd = Server.CreateObject("ADODB.Command")
End Sub
Sub Connection(oConn)
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open "Provider=SQLOLEDB;Server=;User ID=;Password=;Database=;"
End Sub
Sub Destroy(obj)
If isObject(obj) Then Set obj = Nothing
End Sub
ASP调用代码
Dim strEmail, strUserName
Dim objCmd, objConn, intResult
strEmail = Request.Form("email")
strUserName = Request.Form("username")
'服务器端数据验证(略)
Command objCmd
Connection objConn
With objCmd
.ActiveConnection = objConn
.CommandType = 4
.CommandText = "sp_join"
.Parameters.Refresh
.Parameters("@email") = strEmail
.Parameters("@username") = strUserName
.Execute
End With
intResult = objCmd.parameters("@result")
Destroy objCmd
Destroy objConn
If intResult = 0 Then
Response.Write("注册失败")
Else
Response.Write("注册成功")
End If
这是一个简单的例子,希望能起到抛砖引玉的作用。