我有数百条数据要写入SQL表中,并且在写之前要先判断这些数据在表中是否存在,如果存在就用update,如果不存在就add.
我现在用的方法是用循环,一条一条的用SQLCommand去 update table或是insert into,有什么什么更好的方法啊.还望指教.

解决方案 »

  1.   

    拼成一个大的sql字符串,用一个SqlCommand一次过处理
      

  2.   

    对,拼成一个完整的sql,一次性执行速度会比你的方法快几十倍,甚至上百倍类似的sql:if not exists(select 1 from TableName where iid=111 )--不存在则插入
    INSERT INTO TableName([str_CompanyName],[str_Email],[str_LoginUserPW],[str_Lianxr],[str_Url],[str_Tel],[str_Fax],[str_Re]) Values('{0}','{11}','{2}','{3}','{4}','{5}','{6}','{7}');
    if not exists(select 1 from TableName where iid=1222 )--不存在则插入
    INSERT INTO TableName([str_CompanyName],[str_Email],[str_LoginUserPW],[str_Lianxr],[str_Url],[str_Tel],[str_Fax],[str_Re]) Values('{0}','{12}','{2}','{3}','{4}','{5}','{6}','{7}');
    。。

      

  3.   


    isjoe:你的方法我看不太明白,给说的详细一些吗?
      

  4.   

    必须用拼接成一条sql来处理,不然数据库很容易被拖死。
    顶3楼的方法。
      

  5.   


    StringBuilder sb = new StringBuilder();
    for(循环你的数百条数据)
    {
        sb.AppendFormat("if(exists(select 1 from 表 where ID={0}))",当前循环的记录的ID);
        sb.AppendFormat("update 表 set XX=XX......");
        sb.Append("else");
        sb.AppendFormat("insert into 表 values(。。)");
    }SqlComamnd cmd = ..........
    cmd.ExecuteNonQuery(sb.ToString());
      

  6.   

    应该用两条SQL就可以了,一条INSERT,一条UPDATE
      

  7.   

    这不就是批量更新嘛,参考:for(数百条数据)
    {
       sql=String.Format("select count(*) from TableName where id='{0}'",id);
       int num=Convert.Toint32(command.ExecuteScalar());
       if(num>0)//如果记录存在则更新,否则就插入
       {
         update TableName set ……
       }
       else
       {
          insert into TableName() values()
       }
    }
      

  8.   

    如果这表沒有外键话,可以有更加高效的方法
    先把数据全部插进表中,管它重复不重复的
    然后执行一下SQLselect c1,c2,c3 into #tempTable
    from Table
    group by c1,c2,c3
    delete from Table;
    insert into Table
    select * from #tempTable