问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使用sql server快速批量更新数据

发布网友 发布时间:2022-04-07 22:52

我来回答

4个回答

懂视网 时间:2022-04-08 03:13

要将datatable 批量更新到数据表其实是两步:

(1)将datatable快速存入一个表中;

(2)根据一个数据表更新另外一个数据表;

下面细说:

(1)将datatable快速存入一个表中;

1)   insert循环插入;
2)   sqldataadapter.update(dataset,tablename);
3)   sqlbulkcopy.WriteToServer(datatable);

1、生成测试的datatable表,表结构如下:
UniqueID(主键,自动增长)   |   CompanyName   |   CompanyCode   |   Address   |   Owner   |   Memo
共6个字段。

SqlConnection sqlconnection = new SqlConnection(connectionString);

SqlDataAdapter sqldataadapter = new SqlDataAdapter("select * from Table_1 where 1=2", sqlconnection);

DataSet dataset = new DataSet();

sqldataadapter.Fill(dataset, "Table_1");

DataTable datatable = dataset.Tables[0];

//生成20000条记录

for (int i = 0; i < 20000; i++)

{

      DataRow datarow = datatable.NewRow();

      datarow["CompanyName"] = "companyname"+string.Format("{0:0000}",i);

      datarow["CompanyCode"] = "companycode" + string.Format("{0:0000}", i);

      datarow["Address"] = "address" + string.Format("{0:0000}", i);

      datarow["Owner"] = "owner" + string.Format("{0:0000}", i);

      datarow["Memo"] = "memo" + string.Format("{0:0000}", i);

      datatable.Rows.Add(datarow);

}


2、使用sqlcommand.executenonquery()方法插入

foreach (DataRow datarow in datatable.Rows)

{

string sql = "INSERT INTO [Table_1]([CompanyName],[CompanyCode],[Address],[Owner],

)" +

"VALUES(‘" + datarow["CompanyName"].ToString() + "‘" +

",‘" + datarow["CompanyCode"].ToString() + "‘" +

",‘" + datarow["Address"].ToString() + "‘" +

",‘" + datarow["Owner"].ToString() + "‘" +

",‘" + datarow["Memo"].ToString() + "‘)";

   using (SqlConnection sqlconn = new SqlConnection(connectionString))

   {

   sqlconn.Open();    SqlCommand sqlcommand = new SqlCommand(sql, sqlconn);

   sqlcommand.ExecuteNonQuery();

   sqlconn.Close();

   }

}

插入20000条记录时间:00:00:29.7336000

3、使用sqldataadapter.update(dataset,tablename);

SqlCommand insertcommand = new SqlCommand("INSERT INTO [Table_1]([CompanyName],[CompanyCode],[Address],[Owner],

)" +

"VALUES(@CompanyName, @CompanyCode,@Address,@Owner,@Memo)",new SqlConnection(connectionString));

insertcommand.Parameters.Add("@CompanyName", SqlDbType.NChar, 50, "CompanyName");

insertcommand.Parameters.Add("@CompanyCode", SqlDbType.NChar, 25, "CompanyCode");

insertcommand.Parameters.Add("@Address", SqlDbType.NChar, 255, "Address");

insertcommand.Parameters.Add("@Owner", SqlDbType.NChar, 25, "Owner");

insertcommand.Parameters.Add("@Memo", SqlDbType.NChar, 255, "Memo");

sqldataadapter.InsertCommand = insertcommand;

sqldataadapter.Update(dataset, "Table_1");

插入20000条记录时间:00:00:22.8938000

使用sqlbulkcopy.writetoserver(datatable)

SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction);

sqlbulkcopy.DestinationTableName = "Table_1";//数据库中的表名

sqlbulkcopy.WriteToServer(dataset.Tables[0]);

插入20000条记录时间:00:00:00.3276000

所以说速度是sqlbulkcopy最快,sqldataadapter.update()次之,sqlcommand.ExecuteNonQuery()最慢。

 

 (2)根据一个数据表更新另外一个数据表;

UPDATE A SET A.a=B.a FROM B WHERE A.b = B.b

代码的意思是根据数据表A中的b列与B中的b列之间的比较来更新  A中的a列

 

^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^

欢迎来我的淘宝店【老李飞充】,话费充值优惠靠谱,http://chinatrust.taobao.com

^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^

 

SQL快速操作技巧2_datatable批量更新到数据表

标签:

热心网友 时间:2022-04-08 00:21

试试循环吧

declare @cnt int
select @cnt = count(1) from A
while(@cnt > 0)
begin
--更新
set @cnt = @cnt - 1
end

按照你补充的,你这个完全可以把几种状态的判断先做好,然后直接对满足条件的批量更新。
做个临时表放置标识字段跟状态,对满足某个状态的批量update。

 索引可以优化查询,update跟delete这种操作反而会破坏索引。

热心网友 时间:2022-04-08 01:39

你都不说清楚情况,哪来的办法追问比如现在有一个表的表头是{状态,a,a1,b1,b2,b3……bn},现在要实现:if 状态= m set {b1=1, ...,ba = 1}; if 状态 = n set {b1 =1,..., ba1 = 1}

一共有400多万条数据,以前用游标做时每千条要耗时1分钟左右,现在需要把时间压缩到每千条10秒左右

谢谢!

追答是不是状态不一样 要设置不同的列=1 ?

热心网友 时间:2022-04-08 03:14

你这个为什么要用游标?循环下状态不就可以了!要看你状态有多少种了
sql server如何批量更新数据。

把这张表;也导入SQL;再用来更新UPDATE 要根据的表 SET 更新的字段 FROM 要更新的表 A LEFT 导入SQL的表AS BON A.ID =B.ID cygcyg2010 | 发布于2013-09-09 举报| 评论 0 0 用Excel辅助,请参考:http://zhidao.baidu.com/question/534961343.html?oldq=1如有疑问,请追问。 潇洒云哥 | 发布于...

sql语句连表修改数据

一、首先,打开SQL Server管理工具,使用SQL语句创建一个测试表。二、然后在测试表中插入三个测试数据。三、接着 用select * from tblUpdate语句,查询刚刚插入的数据。四、使用update tblUpdate set Col2 批量修改整个表的数据。五、使用update tblUpdate set Col2 =批量修改指定条数的记录。

sqlserver 批量更新某些行数据等于另一行数据,求教

--exec sp_executesql @strsql update #temp1 set pic = @pic,place = @place where dmlx = @dmls select @intitNum = @intitNum + 1 end end end

sqlserver 批量更新某些行数据等于另一行数据,求教

我个人的建议是..把有数据的列..重新导到一张新表 可以用 create table table_name select column_name1,column_name2 from aab;然后以这张新表为条件.进行更改..因为你在update的时候..不能用更改的表做为条件...这是语法不允许的...

更新基本表中的记录使用的sql命令是

第一步,打开数据表,例如,要在表中找到数据1,见下图,转到下面的步骤。第二步,完成上述步骤后,单击“newquery”选项,见下图,转到下面的步骤。update[表名]set[字段名]=[值];如果是根据一个表更新此表,套用如下方式:update[表名]set[字段名]=(select[字段名]from[其他表]where[两表间的...

sql 批量更新update

什么数据库呀?给你写个sqlserver的,其他数据库的话另说 update table2 set pwd=table1.ip from table1 inner join table2 on table1.username=table2.username

SQLServer如何根据a表ID批量更改b表字段名为a表name?

1、通过存储过程 2、游标获取要更新的a表的集合 3、循环遍历a表的记录 4、获取到a表的记录后,第一条记录更新b的第一个字段,第二条记录更新b的第二个字段 依次处理即可

求一个sql批量更新语句 内容是这样不同的名字需要查找,更新对应名字...

比如A表,B表,列一样,B表数据新,要更新到A表:姓名, 电话, 邮箱, 手机 可以这么写(假设用姓名关联):update a set 电话 = (select 电话 from b where a.姓名=b.姓名),邮箱 = (select 邮箱 from b where a.姓名=b.姓名),手机 = (select 手机 from b where a.姓名...

sql语句进行批量修改

不要使用包含聚合函数的表达式。start是一个整数,指定子串的开始位置。length是一个整数,指定子串的长度(要返回的字符数或字节数)。LEFT返回从字符串左边开始指定个数的字符。语法LEFT ( character_expression , integer_expression ) 参数character_expression字符或二进制数据表达式。character_expression ...

SQL 批量更新语句

1.使用存储过程 2.在程序代码里逐条循环执行这里给出一种更高效、简洁的做法,批量更新SQL ,一句SQL就可以替代麻烦的循环过程,有MS SQLServer、Oracle、DB2下的写法--关键点:t4和t1是同一个table,primary key肯定也是同一个,--并以它进行关联,这样在 select语句里即可引用到要update的表的...

如何使用sql server sqlserver数据库 sql server添加数据 sqlserver导出数据 sql server数据库导出 sqlserver删除数据 sql server导入数据库 sql server修改表数据 c#连接sqlserver数据库
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
帮我推荐个本本吧~ 预算大概在4000左右(上下浮动500元)主要看性价比我... 想买台笔记本,请问华硕N75的性价比怎么样,如果不行麻烦推荐一台6000... 关于暑假买笔记本电脑……电脑达人进 宏基6930G玩魔兽世界能开几个小时,会很热么?烫手不? 宏碁(Acer)型号MS2130 驱动 石磊发表论文 朱龙生履历 贺瑞麟烈士贺瑞麟 石磊最年轻正处级 共青团南京市委大事记 “云计算”难不难?本人大学专业是计算机,有一定的基础。 打算去新加坡留学,请问新加坡哪所大学最好 2019【大学课件】Amazon云计算AWS 留学新加坡有哪些途径 戴尔“给力”国内高校云计算 广州大学建首个教育行业云平台txt全集下载 注册堡垒之夜手游,遇到这个情况怎么办 国内开设云计算在职研究生的高校排名 去新加坡留学读研条件会很严格吗?有坚定创业理念的学生去新加坡留学怎么样? 堡垒之夜手游为啥进不去游戏?网上看机型有有荣耀v10的 本机v10 去新加坡留学,大家说下,留学中介机构哪个信得过啊? 去新加坡留学的话需要什么条件?费用又是怎样的呢? 我QQ想改密码,但是密码保护问题忘了,怎么办? 堡垒之夜手游怎么登陆 堡垒之夜手游登录方法 云计算模式在高校实验室建设中有哪些应用 请高人不吝赐教 我忘记了我的QQ密码和密码保护的答案,怎么办? 云计算现在被炒的那么火,什么都上云,在教育和高校科研这方面怎么上云呢?教育上云和在线教育一样吗? 我的QQ被盗我想改密码,但我忘了要回答问题的答案怎么办? QQ密码保护忘记答案了要怎么办?我想改。 我QQ密码保护忘了个答案怎么办 qq的密码保护的问题的答案忘记了怎么办??急啊~!!! 黑马软件测试费用一般是多少? 大学教务系统属于云计算吗? 关于鸡的笑话 关于鸡鸡的笑话!?!! 幽默段子:你敢对鸡怎么样,我就对你怎么样 幽默笑话(鸡过河) 小鸡的搞笑笑话是? 关于鸡腿的幽默和笑话 幽默笑话/歇后语/鸡衔骨头 搞笑段子:大家伙说说啥意思 幽默笑话之北京朝阳区传媒大学附近哪有鸡,已经笑喷了 百榴农业的河阴软籽石榴什么时候上市 百榴农业河阴软籽石榴中秋节可以吃到吗 正宗的会理软籽石榴上市了没,有人知道不 荥阳河阴石榴几月成熟? 8号过生日几点发朋友圈合适 18岁生日什么时候发朋友圈 生日时间在朋友圈公开好吗 过生日的朋友圈可以提前或者推后发么? 今天我过生日想发一段祝自己生日的一段话朋友圈几点发合适