SQL批量update,insert优化

qq4004229 2011-11-02 03:59:47
第一个问题:
list<string,int> sqlList=new list<string,int>();
如果for循环出来就是下面的SQL

update table set title ='abddd' where id =1;

update table set title ='d' where id =2;
update table set title ='ab' where id =2;
....................


我想写一个存储过程,只要传title值和id值,能不能实现不用循环sqllist?

A.还是只能一条一条传进去?
B.把sql 组合起来传进去?

如“update table set title ='abddd' where id =1;update table set title ='abddd' where id =2......;”

第二个问题:
大批量插入数据大家有何好办法??
...全文
576 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinesedoor 2012-02-01
  • 打赏
  • 举报
回复
接分路过
游标
qq4004229 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 abel_master 的回复:]
title1:2|title2:7

title内容:修改的ID
[/Quote]

这个怎么传?在存储过程怎么循环???
XQSoul 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tsapi 的回复:]
要不然你直接操作表,先把现有表的字段赋值,然后对表update操作。
我发源码给你看看。

C# code
SqlConnection con = new SqlConnection(Configuration.Conn);
SqlDataAdapter sdp = new SqlDataAdapter();
Da……
[/Quote]
没看明白。
Daqing 2011-11-02
  • 打赏
  • 举报
回复
要不然你直接操作表,先把现有表的字段赋值,然后对表update操作。
我发源码给你看看。
            SqlConnection con = new SqlConnection(Configuration.Conn);
SqlDataAdapter sdp = new SqlDataAdapter();
DataSet dt = new DataSet();
SqlCommand comm = new SqlCommand();

comm.Connection = con;
comm.CommandText = "select Names,Address,Pid,Image from Users where address='江西'";
sdp.SelectCommand = comm;//首先要指定selectitem,并且字段要指定清楚,和insert字段个数和名称一致
SqlCommandBuilder scom = new SqlCommandBuilder(sdp);
sdp.Fill(dt, "Users");

comm.CommandText = "Insert into Users values(@Pid,@Names,@Address,@Image)";
SqlParameter[] pars = new SqlParameter[] {
new SqlParameter("@Pid",SqlDbType.Int,4,"Pid")
,new SqlParameter("@Names",SqlDbType.VarChar,10,"Names")
,new SqlParameter("@Address",SqlDbType.NVarChar,20,"Address")
,new SqlParameter("@Image",SqlDbType.Image,200,"Image")
};
pars.ToList<SqlParameter>().ForEach(parm => comm.Parameters.Add(parm));

DataRow dr = null;
for (int i = 19; i < 23; i++)
{
dr = dt.Tables[0].NewRow();
dr["Names"] = "Jeep" + i.ToString();
dr["Address"] = "第" + i.ToString() + "街道";
dr["Pid"] = i + 8;
dt.Tables[0].Rows.Add(dr);
}//通过对表值的修改,实现方法Update(table) 这里你做循环处理

SqlCommandBuilder icom = new SqlCommandBuilder(sdp);
sdp.InsertCommand = comm;//insert com语句
sdp.Update(dt.Tables["Users"]);
dt.AcceptChanges();
相爱相随 2011-11-02
  • 打赏
  • 举报
回复
批量修改数据库,使用事务机制,性能最好;
使用步骤如下:
1.开始事务
2.执行修改数据库的SQL语句(数量不限)
3.提交事务
abel_master 2011-11-02
  • 打赏
  • 举报
回复
title1:2|title2:7

title内容:修改的ID
abel_master 2011-11-02
  • 打赏
  • 举报
回复
大批量的插入数据没有直接修改数据库中已存在的数据速度快~这个可以自己试验一下10w条记录用了将近1分钟,而修改10万条记录用不了5秒钟。
建议:
预先生成好N多条数据,用多少条 就修改多少条 用存贮过程
如果每个title都不一样,传入的参数最好有分隔符,程序中拼接字符串的时候要注意用StringBuilder的Append方法不要用“+=”
{title1:2|title2:7|title3:6}

得到诸如上述的内容,在存储过程中处理就行了
qq4004229 2011-11-02
  • 打赏
  • 举报
回复
谢谢大家。。
快溜 2011-11-02
  • 打赏
  • 举报
回复
拼字符串就好了
sqlstr+="update ..."
jevin8011 2011-11-02
  • 打赏
  • 举报
回复
这个问题放到SQL SERVER版块解决起来会很快。
bdmh 2011-11-02
  • 打赏
  • 举报
回复
每个表都不一样,id也不一样,当然要区分开啊

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧