SQLServer批量修改和插入

这篇具有很好参考价值的文章主要介绍了SQLServer批量修改和插入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SQLServer 批量修改或插入

场景

今天在工作中遇到这么一个场景,我需要根据条件对表A做批量更新或插入。因为条件比较复杂,所以我使用了临时表B,先把需要更新或插入的数据查询出来放入临时表。然后更新表A的某字段,更新条件是A.id = B.id,更新效果是若记录存在表A中,则更新表A的字段,若不在表A中,则插入一条记录到表A。

初始方案

首先想到的是写两条SQL:

  1. update使用A.id in (select id from B),这时会更新所有存在的记录的字段,不存在则不更新
  2. 接下来再使用insert,条件是A.id not in (select id from B),把A不存在未更新的数据插入到A

两条SQL执行完,则完成了所有数据的更新和插入。

优化方案

后面有朋友提示可以使用SQL Merge语句做这件事情,由于对数据库并不熟悉,所以不知道还有这么一个语法。我查阅了相关资料,发现Merge确实很合适这个场景。参考SQL Server Merge语句 - SQL Server教程 (yiibai.com)重构了代码文章来源地址https://www.toymoban.com/news/detail-559054.html

select ... into #temp 
	from A  where ... 

merge [A] a using #B b  
    on a.id = b.id  
    when matched  
	    then update set a.field = 1 
    when not matched by target  
	    then insert (field)  
		values (b.id);

到了这里,关于SQLServer批量修改和插入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SqlServer插入数据不报错但查询不到数据

    近日,某使用SqlServer作为数据库的系统,由于服务器磁盘损坏修复后,部分数据一直无法入库,进一步跟踪收集现象,发现以下特点: 这些数据抽取出来使用SQL直接入库,没有提示数据影响行数,数据库无法查询到这部分数据; JDBC入库返回影响行数为-2; 仅有部分数据无法

    2024年02月12日
    浏览(44)
  • Java8 实现批量插入和更新,SpringBoot实现批量插入和更新,Mybatis实现批量插入和更新

    基于mybatis实现的批量插入和更新 由于直接执行批量所有数据可能会出现长度超出报错问题,使用如下方式即可解决 原理还是分配执行,这里的100就是设定每次执行最大数 这里使用插入作为例子,也可以使用批量更新 更新的写法

    2024年02月12日
    浏览(37)
  • IDEA Java1.8通过sqljdbc4连接sqlserver插入语句

    1. 下载sqljdbc4:https://mvnrepository.com/artifact/com.microsoft.sqlserver.jdbc/sqljdbc4/4.0 下载后在IDEA放入仓库内,可以放在resources下,右键“add as library”。 2. 在控制面板中开启Telnet客户端,默认是不开启的。 若报错“ java.lang.classNotFoundException:com.microsoft.sqlserver.jdbc”说明1或2没有设置成功

    2024年02月09日
    浏览(29)
  • MySQL——插入加锁/唯一索引插入死锁/批量插入效率

    本篇主要介绍MySQL跟加锁相关的一些概念、MySQL执行插入Insert时的加锁过程、唯一索引下批量插入可能导致的死锁情况,以及分别从业务角度和MySQL配置角度介绍提升批量插入的效率的方法; 在介绍MySQL执行插入的加锁过程之前,先复习下几种跟锁相关的概念; 快照读 InnoDB 利

    2024年02月12日
    浏览(29)
  • Mybatis 中传入List实现 批量插入、批量更新、批量删除

    个人收藏使用 文章来自Mybatis 中传入List实现 批量插入、批量更新、批量删除 - chelsey3tsf - 博客园 (cnblogs.com) 1. 批量插入 : Mapper层: 对应的mapper.xml: 如果List数据量比较大,可以考虑将List分批次插入 2. 批量更新: 批量更新只提供更新单个字段的,因为更新多个字段无论哪种

    2024年02月11日
    浏览(47)
  • ElasticSearch中批量操作(批量查询_mget、批量插入删除_bulk)

    有时候可以通过批量操作来减少网络请求。如:批量查询、批量插入数据。 当某一条数据不存在,不影响整体响应,需要通过found的值进行判断是否查询到数据。          在Elasticsearch中,支持批量的插入、修改、删除操作,都是通过_bulk的api完成的。 请求格式如下:(

    2024年02月12日
    浏览(37)
  • Elasticsearch 批量插入文档

    本文介绍Elasticsearch中通过单次请求实现批量插入文档。这种方式可以提升性能,通常打开和关闭连接代价比较高,因此最好多次请求仅做一次。 下面示例我们假设系统已经有了索引\\\"myIndex\\\",类型为\\\"person\\\",且映射有name和age两个属性。 简单批量插入 当批量插入所有文档都属于

    2024年02月11日
    浏览(53)
  • mysql 批量插入BulkCopy

    一、新建项目:SqlSugarDemo 二、连接串未添加AllowLoadLocalInfile=true 中文提示 : BulkCopy MySql连接字符串需要添加 AllowLoadLocalInfile=true; 添加后如果还不行Mysql数据库执行一下 SET GLOBAL local_infile=1  English Message : connection string add : AllowLoadLocalInfile=true  三、Startup.cs HomeController.cs

    2024年02月12日
    浏览(44)
  • java实现批量插入数据

    日常工作或者学习中,可能会遇到批量插入数据的需求,一般情况下数据量少的时候,我们会直接调用批量接口插入数据即可,当数据量特别大时,可能由于数据库限制,插入的数据最多不能超过100条(假如限制100条),就算是数据库支持一次性插入千条也会耗内存,如果使用

    2024年02月11日
    浏览(47)
  • 批量插入、更新mapper写法

    参考:https://blog.csdn.net/mianma_YAYIZI/article/details/102466672?spm=1001.2014.3001.5506 对应sql

    2024年02月11日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包