对,拼成一个完整的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}'); 。。 。
isjoe:你的方法我看不太明白,给说的详细一些吗?
必须用拼接成一条sql来处理,不然数据库很容易被拖死。 顶3楼的方法。
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());
应该用两条SQL就可以了,一条INSERT,一条UPDATE
这不就是批量更新嘛,参考: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() } }
如果这表沒有外键话,可以有更加高效的方法 先把数据全部插进表中,管它重复不重复的 然后执行一下SQLselect c1,c2,c3 into #tempTable from Table group by c1,c2,c3 delete from Table; insert into Table select * from #tempTable
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}');
。。
。
isjoe:你的方法我看不太明白,给说的详细一些吗?
顶3楼的方法。
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());
{
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()
}
}
先把数据全部插进表中,管它重复不重复的
然后执行一下SQLselect c1,c2,c3 into #tempTable
from Table
group by c1,c2,c3
delete from Table;
insert into Table
select * from #tempTable