主表table,有个字段为 idd
明细表1:table1   有个字段为 idd
明细表2:table2   有个字段为 idd
明细表3:table3   有个字段为 idd
明细表4:table4   有个字段为 idd
明细表5:table5   有个字段为 idd
明细表6:table6   有个字段为 idd
明细表7:table7   有个字段为 idd我想实现主表table插入一条记录, 把刚插入的这条记录的idd 值同时插入到 table1到 table100中,只有当所有数据全部插入完成后才提交数据,如何个做法?table 有好多用户在同时插入数据,这种功能应如何实现?

解决方案 »

  1.   

    当所有数据全部插入完成后才提交数据,如何个做法? 
    用存储过程,全部执行完毕后,在Commit.出现异常,就RollBack.
      

  2.   

    用事务处理。
                OracleConnection con = dbclass.GetOracleConnection();
                OracleCommand com = new OracleCommand();            //用事务对数据进行多表插入
                com.Connection = con;
                com.Transaction = con.BeginTransaction();
                try
                {
                    //.....要插入的方法语句                com.Transaction.Commit();
                    return true;
                }
                catch (Exception ee)
                {
                    com.Transaction.Rollback();                string error = ee.Message.Replace("'", " ");
                    return false;
                }
      

  3.   

    用事务包起来.插入主表后把主表的id取出来.再插从表
    (取刚插入的自增id用SCOPE_IDENTITY())
    没什么难的,如果你愿意用sp来搞,则一个sp就可搞定.
      

  4.   

    给个简单的例子吧.
    create proc test
    as
    begin
    BEGIN TRAN
    declare @id int
    insert into tableP (t_name,...) values('xxxx',...)
    set @id = SCOPE_IDENTITY()--取得刚插入的主表id
    IF @@ERROR<>0 GOTO ERRORinsert into table1 (idd,...) values(@id,...)
    IF @@ERROR<>0 GOTO ERROR--........省略,我就不写了,后边接着插你的从表.COMMIT TRAN
    returnERROR:
    ROLLBACK TRAN
    RETURN
    end
      

  5.   


    BEGIN DISTRIBUTED TRANSACTION tran
    --过程IF @@ERROR<>0
    GOTO _hdlError COMMIT TRANSACTION tran_hdlError:
    IF @@ERROR<>0
    BEGIN
    ROLLBACK TRANSACTION tran
    SET @msg='新增数据发生错误。Error ID:'+rtrim(str(@@ERROR))
    END SELECT @msg
      

  6.   

    事务..
    一个conn 创建的事务,然后绑定两个commandText 如果成功就Summit,否则级是Roolback()
      

  7.   

    sqlserver 的触发器就是事务的,不过会抛出一个异常