sqlserver批量更新操作,有要注意的地方留心
如果针对某个表中数据要进行批量更新,由于是客户的正式库一定要小心操作。
在批量更新前可以做下该表的备份,可应用SELECT INTO FROM语句来插入一个新表当中
SELECT value1, value2 into Table_2 from Table_1
说明:要求目标表Table_2不存在,因为在插入时会自动创建表Table_2
另外,还可以应用INSERT INTO SELECT语句
Insert into Table2(field1,field2,…) select value1,value2,… from Table1
或
Insert into Table2 select * from Table1
说明:
(1)Table2必须存在,并且字段field,"field2…也必须存在;
(2)如果Table2有主键而且不为空,并且没有设置自增长,则","field1," "field2…中必须包括主键;
(3)不要和插入一条数据的sql混了,不要写成:
Insert into Table2(field1,field2,…) values (select value1,value2,… from Table1)
(4)field与value的数据类型要对应上;
进入正文,批量更新的两种方式,如下。
第一种
左连接方法,即left join
update 表1 SET 表1.CnasDate=t1.日期 FROM (select 日期,Id from 表2) as t1 left join 表1 as t2 ON t1.Id=t2.ID
注意:left join后面的“表1” 就只限定数据库表名就行,不要去给表1加上一些查询条件(类似表2那样),那样会导致批量更新失效,将整个表的数据全给更新了,如果没有备份就BABIQ了,而我们要更新只是部分数据,要理解left join的含义,左连接就是以左边查询的表数据行数为准,返回左表的所有数据,即使右表中没有匹配的行!
第二种,比较简洁
update 表一 set 表一的字段= 表2的字段 from 表一, 表二 where 表一.Id = 表二.Id
示例
UPDATE a SET a.RealityNumber = b.Qty FROM ( SELECT * FROM 表1 WHERE Version = '202206' AND BillNum = 'BT20220801021701 ' ) a, ( SELECT * FROM 表2 WHERE Version = '202206' AND BillNum = 'BT20220801021701 ' ) b WHERE a.id = b.id
说明:此方式和第一种,不同之外有一个就是针对表1可以加上限制的查询条件。
改为第一种方式
UPDATE 表1 SET 表1.RealityNumber= a.Qty FROM ( SELECT * FROM 表2 WHERE Version = '202206' AND BillNum = 'BT20220801021701 ' ) a LEFT JOIN 表1 b ON a.Id= b.Id
还是要提醒一下,上述代码中表1不要加上任何限制条件。
分类:
.netcore学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端