入库存储过程 ( 积分: 20 )

  • 主题发起人 主题发起人 lsz100
  • 开始时间 开始时间
L

lsz100

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个表 A(A1,A2,A3)三个字段,写一个存储过程要有事务,把一个ADOQUERY中的多条记录通过这个过程在一个事务中保存到数据。
 
你的意思是在这个表中插入数据?
 
直接在存储过程中写入数据集的SQL语句 然后通过游标存储不行么?
 
不明白,给个例子。
 
在mssql上按F1打游标搜索
 
DECLARE&nbsp;@A&nbsp;varchar(50),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@B&nbsp;varchar(50),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@C&nbsp;varchar(50)<br><br>DECLARE&nbsp;Cursor_表A&nbsp;CURSOR&nbsp;FOR<br>SELECT&nbsp;A1,&nbsp;A2,&nbsp;A3&nbsp;FROM&nbsp;表A;<br><br>OPEN&nbsp;Cursor_表A;<br>FETCH&nbsp;NEXT&nbsp;FROM&nbsp;Cursor_表A&nbsp;INTO&nbsp;@A,@B,@C;<br>WHILE&nbsp;@@FETCH_STATUS&nbsp;=&nbsp;0<br>BEGIN<br>&nbsp;&nbsp;INSERT&nbsp;INTO&nbsp;表B&nbsp;VALUES&nbsp;(@A,@B,@C);<br>&nbsp;&nbsp;FETCH&nbsp;NEXT&nbsp;FROM&nbsp;Cursor_表A&nbsp;INTO&nbsp;@A,@B,@C; &nbsp;&nbsp;<br>END;<br>CLOSE&nbsp;Cursor_表A;<br>DEALLOCATE&nbsp;Cursor_表A;
 
写一个存储过程要有事务,把一个ADOQUERY中的多条记录通过这个过程在一个事务中保存到数据
 
上面的例子是使用游标来进行存储的&nbsp;就是一个事务<br><br>在插入过程可以判断&nbsp;若出现错误&nbsp;事务回滚<br>IF&nbsp;@@ERROR&nbsp;&gt;&nbsp;0&nbsp;OR&nbsp;@@ROWCOUNT&nbsp;=&nbsp;0<br>&nbsp;ROLLBACK&nbsp;TRANSACTION
 
有没有搞错adoquery是程序组件,怎么传递一个dataset给一个存储过程?<br>描述大错特错,该说<br><br>怎么用一个使用事务控制的存储过程保存一个查询集(表a数据已经存)的数据到一个数据库表,也就是说,已知一个数据表a,一个目的表b,存a某些数据到b,可能有多个记录<br>要么整体存,要么存不了<br>==================================================<br>另一种方法是你的数据在&nbsp;软件输入界面里面(ADOQUERY),没有提交到数据库&nbsp;,问ADOQUERY&nbsp;如何做事务控制就行了,根本不需要存储过程<br>ADOQUERY1.begintransaction<br>ADOQUERY1.append;<br>ADOQUERY1.fieldbyname('xxx').asstring:='axxxx';<br><br>try&nbsp;<br>ADOQUERY1.commit;<br>except<br>ADOQUERY1.rollback<br>end;
 
最好的方式是把原来的关联的记录DELETE掉,再把修改过的记录Insert到各个表中。
 
能说的明白点吗
 
同意bsense的方法,但是有一点问题,ADOQUERY1不能够begintransaction&nbsp;提交事务,要用ADOConnection1去处理事务才可以,
 
另外也可以把ADOQUERY中的数据写到一个临时表中,然后再使用银雨辰的方法,写成储存过程,只不过使用游标,如果在数据量很大的话,恐怕会很影响速度。
 
同意楼上所说的,但我觉得没什么必要一定要放在存储过程里做。<br><br>采用ADO的事务处理方式就可以解决。<br><br>不但也有采用临时表的方式去作的。<br><br>好的速达的单据就是这么搞的
 
后退
顶部