SQLserver 中 merge into 的用法
2021/11/30 19:07:01
本文主要是介绍SQLserver 中 merge into 的用法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目的
merge into高效的把临时表中的数据更新到目标表中。
merge into
语法
语法如下:
merge into 目标表 a using 源表 b on a.主键=b.主键 and a.条件字段1=b.条件字段1 ... when matched update set a.主键=b.主键,a.字段1=b.字段1 ... when not matched insert values (b.主键,b.字段1 ...) when not matched by source then delete
merge into
使用案例
创建目标表和源表
脚本如下:
CREATE TABLE UserInfo ( Id uniqueidentifier not null primary key, LoginName varchar(255) not null, UserPwd varchar(255) not null CHECK ((len([UserPwd])>=(6)) and (len([UserPwd])<=(64))), Name varchar(255) not null, Phone varchar(255) not null, ) CREATE TABLE UserInfoBase ( Id uniqueidentifier not null primary key, LoginName varchar(255) not null, UserPwd varchar(255) not null CHECK ((len([UserPwd])>=(6)) and (len([UserPwd])<=(64))), Name varchar(255) not null, Phone varchar(255) not null, ) insert into UserInfo(Id, LoginName, UserPwd, Name, Phone)values(LOWER(NEWID()),'admin','123456','管理员','18600000000'), (LOWER(NEWID()),'admin1','123456','管理员1','18600000000');
使用merge into
脚本如下:
merge into UserInfo as a using UserInfoBase as b on b.ID=b.ID when matched --更新 目标表中有ID,则更新 then update set a.[LoginName]=b.[LoginName], a.[UserPwd]=b.[UserPwd],a.[Name]=b.[Name],a.[Phone]=b.[Phone] when not matched --添加 目标表中没有ID,在原表中有,则插入相关数据 then insert values (b.[Id],b.[LoginName],b.[UserPwd],b.[Name],b.[Phone]) when not matched by source --目标表存在,源表不存在,则删除 then delete;
总结
一般用于数据拷贝,批量执行insert和update
的时候使用,可以大大的提高效率。
这篇关于SQLserver 中 merge into 的用法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-01-08Docker下的SqlServer发布订阅启用
- 2023-06-05Docker安装MS SQL Server并使用Navicat远程连接
- 2023-05-25深入浅出 SQL Server CDC 数据同步
- 2023-05-12通过空间占用和执行计划了解SQL Server的行存储索引
- 2023-04-24以SQLserver为例的Dapper详细讲解
- 2022-11-30SQL server高级函数查询
- 2022-11-26SQL SERVER数据库服务器CPU不能全部利用原因分析
- 2022-11-21SQL Server 时间算差值/常用函数
- 2022-11-20调试Archery连接SQL Server提示驱动错误
- 2022-10-22SQL Server 完整、差异备份+完整、差异还原(详细讲解,规避错误)