发新话题
打印

一条insert语句同时插入两个表,如何解决?

这样也可以吧

可以利用数据库系统内部的事务处理机制,通过在数据库服务器中编写包含事务的存储过程,完成对数据操作的事务处理。同时,利用ADO组件调用存储过程,还可以根据存储过程的返回代码判断事务处理是否执行成功。   

在数据库系统中,每一条SQL语句都是一个事务。因此可以保证每条语句要么完成,要么退回到开始之处。但是如果希望一组SQL语句的操作要么全部完成,要么全部无效,就需要利用数据库的事务处理机制来实现。   

在数据库中生成存储过程的主要代码如下:   

Create  proc  RegisterUser   

(@usrName  varchar(30),  @usrPasswd  varchar(30),@age  int,  @PhoneNum  varchar(20),  @Address  varchar(50)  )   

as   

begin   

//显示定义并开始一个事务   

begin  tran      

insert  into  USER(userName,userPasswd)  values(@usrName,@usrPasswd)   

if  @@error<>0   

begin   

//操作失败,则事务回滚   

rollback  tran      

//返回存储过程,并设置返回码为事务操作失败   

return  -1      

end   

insert  into  USERDOC(userName,age,sex,PhoneNumber,Address)      

values(@Usrname,@age,@PhoneNum,@Address)   

if  @@error<>0   

begin   

//操作失败,则事务回滚   

rollback  tran      

return  -1   

end   

//如果操作执行正确,则提交事务   

commit  tran      

return  0   

end   

在ASP脚本中调用数据库存储过程的主要代码如下:   

  Set  Comm=server.CreateObject   

(“ADODB.Command”)      

  Set  Comm.ActiveConnection=conn      

  Comm.CommandType=adCmdStoredProc      

  Comm.CommandText=“RegisterUser”      

//创建存储过程返回参数对象   

  Set  RetCode=Comm.CreateParameter   

(“RetCode”,adInteger,adParamReturnValue)        

//创建存储过程输入参数对象   

  Set  usrName=Comm.CreateParameter   

(“usrName”,adVarchar,adParamInput,30)        

  Set  usrPwd=Comm.CreateParameter   

(“usrPasswd”,adVarchar,adParamInput,30)      

  Set  age=Comm.CreateParameter(“age”,adInteger,adParamInput)      

  Set  PhoneNum=Comm.CreateParameter   

(“PhoneNum”,adVarchar,adParamInput,  20)      

  Set  Address=Comm.CreateParameter(“Address”,adVarchar,adParamInput,50)      

  Comm.Parameters.Append  usrName      

  Comm.Parameters.Append  usrPwd      

  Comm.Parameters.Append  age      

  Comm.Parameters.Append  PhoneNum      

  Comm.Parameters.Append  Address      

  Comm.Parameters(“usrName”)=request   

(“usrName”)      

  Comm.Parameters(“usrPasswd”)=request   

(“usrPasswd”)      

  Comm.Parameters(“age”)=request(“age”)      

  Comm.Parameters(“PhoneNum”)=request   

(“PhoneNum”)      

  Comm.Parameters(“Address”)=request   

(“Address”)      

  Comm.Execute      

  RetValue=Cint(Comm(“RetCode”))      

//根据数据库存储过程返回代码判断注册是否成功   

  if  RetValue<  0  then        

  response.Redirect  RegisterFail.html      

  else      

  response.Redirect  RegisterOk.html      

  end  if

TOP

发新话题