三张表,一个sql,你怎么也完不成一个insert到三个表吧,要么你写三个sql,要么写个存储过程

解决方案 »

  1.   

    就是不能用存储过程了,我听着别人说主表用实体类,其它的两张表用Hash把两张从表的传过去,但是听的云里雾里的
      

  2.   

    先插入主表,立即查询出来 插入主表的主键,如果主键是GUID 就不需要查了,C#代码就可以得到, 如果主键用的自增 用  SELECT @@IDENTITY,查询,后面2个插入语句都是基于这个主键ID的插入语句,注意事务处理,基本思路就是这样吧
      

  3.   

    那你改成 用程序来实现咯 依次执行3条SQL。 
      

  4.   

    - - 一条sql语句  无法完成你的要求- - 
    要么用代码第一条写入  读出id  然后根据id去插入后面的要么存储过程。    类似于第一种  只是你只用调用一下就可以了。在一种就看你的表 是不是每次都需要    如果是的话  用触发器也可以。 
      

  5.   

    我自己写的不知道这样写可以不StringBuilder strSql = new StringBuilder();
                //定义策略ID
                strSql.Append("declare @npsid  int;"); 
                //插入策略表   
                strSql.Append("insert into ME_NewProductStrategy values('" + model.nps_title + "','" + model.nps_cost + "','" + model.product_id + "','" + model.nps_model + "','"
                + model.nps_pack + "','" + model.nps_cost_basic + "','" + model.nps_cost_attribute + "','" + model.nps_cost_pack + "','" + model.nps_cost_materials + "','"
                + model.nps_cost + "','" + model.nps_index + "','" + model.nps_image + "');");
                //获取策略ID
                strSql.Append("select @npsid=@@IDENTITY;select @npsid;");
                //添加原材料组成表
                strSql.Append("insert into ME_NewProductStrategy_Materials values(@pa_id,'"+ mamodel.materials_id + "','" + mamodel.materials_name + "'");
                //添加新产品属性表
                strSql.Append("insert into ME_NewProductStrategy_Attribute values(@pa_id,'" + attmodel.attr_id+ "','" + attmodel.attr_name + "'");
      

  6.   

    一定要写一个sql语句也可以,用触发器
      

  7.   


    在执行这些SQL 记得使用事务。
      

  8.   


    在执行这些SQL 记得使用事务。
      

  9.   

    楼主第一张表的ID是自动生成的还是插入的啊?如果是插入的你可以试试下面的:
     public bool Test_Add(int id,'','')
            {
                         string str = "insert into table1 values(ID,'','')";
                    cmd = SqlHelper.CreateDbCommand(str, conn);
                    cmd.Parameters.AddRange(parm);
                    conn.Open();
                    int result = cmd.ExecuteNonQuery();
                    return (result > 0) ? true : false;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    conn.Close();
                }
            }
    if(Test_Add)
    {
      string str = "insert into table2 values(,ID,)";
                    cmd = SqlHelper.CreateDbCommand(str, conn);
                    cmd.Parameters.AddRange(parm);
                    conn.Open();
                    int result = cmd.ExecuteNonQuery();
     if(result>0)
    {
    string str = "insert into table3 values(,ID,)";
                    cmd = SqlHelper.CreateDbCommand(str, conn);
                    cmd.Parameters.AddRange(parm);
                    conn.Open();
                    int result = cmd.ExecuteNonQuery();}
                   } 
      

  10.   

    提供两种常用方法,也是最笨的方法:1,在ADO.NET中,启用事务,执行3次,3条语句;2,使用DBMS的触发器,在主键表上建议插入触发器,级联插入数据到另两外键表