列如我想创建50个表,表名为:MyTab1,MyTab2...MyTab50,然后在各表中插入5000条记录。可不可以通过一个事务实现?我写成下面的语句,可事务回滚没有效果,表仍然被创建了。请问怎么回事情?问题问的不贴切请见凉.
 
   DBConnection.BeginTrans
       for i=1 to 50
          TabName="MyTab" & i
          DBConnection.Execute("create table " & TabName & "(ID INTEGER)")
          for j=1 to 5000
             DBConnection.Execute("insert into " & TabName & "values(" & j & ")")  
          next j
       next i
   DBConnection.RollbackTrans '我专门为了实验回滚,所以在此没有写成提交

解决方案 »

  1.   

    因为DDL语句提交后就自动COMMIT了。所以你回滚也没用了。
      

  2.   

    不知道,能不能限制DDL不自动提交事务?
      

  3.   

    打错了,应该是:
    不知道,能不能限制DDL自动提交事务?我想这个建表事务在碰到程序中显式的"commit"语句再提交.
      

  4.   

    呵呵,不能,ddl操作隐含就是提交操作
      

  5.   

    首先建表操作不在事务里的 (如果成功不需要要commit)然后是insert 记录~ 从insert开始,到最后结束,commit一次,就好了呀~ 如果catch到任何exception,就全部rollback;不是挺简单的么
      

  6.   

    只要有DDL,如表的创建,就会自动执行提交。当然回滚已为时已晚。
      

  7.   

    谢谢各位的热心参与,sasacat(傻傻猫)谢谢你的建议,不过,我建这么多表的原因也没办法,现在一时半回也说不清。
    还有几个问题想问清楚点,还请sozdream,sasacat(傻傻猫),xiaoxiao1984(笨猫一只^_^) 等各位朋友指教:1,在一个事务中执行的DML语句的数目很多(假设应用中确实需要这样做),DBMS能否正确处理的了。
    2,如果在一个事务中执行某个表的很多条插入语句,且该表中有BLOB字段(我这儿用BLOB保存OS上图片和文档文件),请问假如我将5-6G左右的BLOB数据用一个事务插入到表的话,DBMS能否正确处理,即碰到CommitTrans将这些数据真正的提交到数据库,碰到RollBackTrans则回滚,放弃数据的插入?还请大家帮忙解答,尤其是第2个问题。谢谢了
      

  8.   

    BLOB不能达到5-6G那么大吧,最多只能4G吧