首页 > 数据库 >SQLServer批量修改和插入

SQLServer批量修改和插入

时间:2023-07-14 13:33:10浏览次数:47  
标签:批量 SQLServer 更新 插入 SQL id select

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)重构了代码

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,更新,插入,SQL,id,select
From: https://www.cnblogs.com/lifuquan/p/17553450.html

相关文章

  • Excel-批量填充数字
    1、一般情况下,都是使用鼠标左右键拖动来实现数据的填充的2、但是填充1200列,下拉拖动就非常麻烦,可以首先定位到A200。在屏幕左侧中央处找到剪切板下方的“A1”字样,鼠标单击A1文字,输入想要跳转的单元格,如A200,输入完成之后,点击回车即可。3、将要填充数据的单元格全部选中,选择的......
  • Dreamweaver批量替换所有超链接替换成#
    需求:想要将页面所有链接地址替换为#。方法一CTRL+F打开“查找和替换”,勾选“使用正则表达式”查找href="([\s\S]*?)"替换为href="#"副作用:样式表链接地址也会被替换为#,需提前备份。方法二也可以查找href="替换为href="#这样所有的链接都变成锚点了,原链接地址......
  • SQLServer中创建用户角色及授权
    在SQLServer中创建用户角色及授权假设,我们准备建立一个dba数据库帐户,用来管理数据库mydb。1.首先在SQLServer服务器级别,创建登陆帐户(createlogin)--创建登陆帐户(createlogin)createlogindbawithpassword='abcd1234@',default_database=mydb登陆帐户名为:“dba”,......
  • NRRD批量转换成NIFTI
    3Dslicer,MITK默认会将医学图像保存为格式为NRRD的图像,但是我们还是习惯于操作NIFTI格式的数据,于是就有了NRRD转换成NIFTI的需求。之前自己有一个比较笨的方法,就是将NRRD图像导入到MITK软件中,然后再另存成NIFTI的数据。如果数据少,还可以接受。但是当数据比较多时,这种方法过于......
  • 批量添加本地jar包至远程仓库
    将maven本地仓库中的jar包用脚本上传到Nexus远程maven库中如果是用的gradle管理工具,可以看我另一篇文章,先将jar包从gradle缓存中转移到maven本地库。这里使用Bash脚本可以将Maven本地库目录的所有jar,一次性导入到Nexus中。如果是在Windows环境中,可以安装Git,使用GitBas......
  • 怎么提升mysql批量更新速度 这个问题怎么解决?
    项目方案:提升MySQL批量更新速度1.简介在开发过程中,我们可能会遇到需要批量更新大量数据的情况,而MySQL默认的单条更新语句执行效率较低,不能满足高效更新的需求。因此,我们需要通过一些优化方案来提升MySQL批量更新的速度。2.方案2.1.使用事务在进行批量更新时,将多个更......
  • 批量解压上传SAP Note
    最近在做印度GST相关的东西,需要手动给系统实施上百个SAPNote,十分繁琐。标准事务代码SNOTE只支持每次上传一个Note,逐个上传大量Note会很麻烦,为此摸索出一个批量解压上传的流程,下面是细节。 0,去SAP网站下载Note文件1,准备好SAR文件,如'0002407980_00.SAR',把所有SAR文件放到同一......
  • linux下批量重命名目录及子目录下的文件
    一、加上后缀名假如只是给当前目录及所有子目录下的文件添加后缀名,使用find和mv就可以了。比如把当前及子目录下所有带_test后缀的文件加上.c后缀find.-typef-name'*_test'-execmv{}{}.c\;find.查找当前及子目录,GNU版本的find也可以省略点号,效果一样。......
  • Tita 升级|部门批量导入导出功能上线
    部门支持批量导入导出Tita-OKR和新绩效一体化管理平台使用场景:1.初始化系统数据时,新建大量部门;2.有很多部门需要批量修改很多信息,如部门负责人、HRBP等,导出导入后批量维护信息点击批量导入/导出按钮,根据需求下载相应模板(如新建部门时下载空的模板即可;更新已有的部门数据时......
  • vue 批量下载通用方法【转载】
    自己做项目的时候遇到需要批量下载文件的需求,于是下意识就用了循环url地址数组创建a标签下载的方法,但浏览器有限制,超过10个文件将不能下载,最多下载10个。于是找遍网上文章,终于找到了适用的。在这记录一下,分享给需要的人首先需要用到两个插件file-saver和jszip在需要批量下载......