SQL Server高级开发(Merge Into的使用)

【SQL高级知识】MERGE INTO语句 假设我们有两个表格,一个是"users"表格,包含了用户的ID、姓名和地址信息;另一个是"users_updates"表格,包含了用户的ID和更新后的地址信息。我们想要使用MERGE INTO语句将"users_updates"表格中的地址信息合并到"users"表格中。如以上示例所示,MERGE INTO语句可以根据指定的条件将两个表格中的数据进行合并和更新,非常方便实用。 阅读详情

SQL Server高级开发(Merge Into的使用)

我们先创建一张临时表 #TempTable包含三列:学生姓名,科目名称和成绩,建表语句如下:

Create Table #TempTable
(
    StudentName nvarchar(20) Not Null,
    SubjectName nvarchar(20) Not Null,
    Score int  null
)

其中学生姓名和科目名称是不能重复的,那么我们在插入数据时就会先检测数据是否存在,不存在就写入,存在就更新,SQL的写法如下:

Declare @StudentName As nvarchar(20)
Declare @SubjectName As nvarchar(20)
Declare @Score As int
Select @StudentName = N'小明'
Select @SubjectName = N'语文'
Select @Score = 88

If Exists (Select Top 1 * From #TempTable Where StudentName=@StudentName And SubjectName=@SubjectName)
	Update #TempTable Set Score=@Score Where StudentName=@StudentName And SubjectName=@SubjectName
Else
	Insert Into #TempTable(StudentName,SubjectName,Score) Values(@StudentName,@SubjectName,@Score)

我们第一次执行这个语句时,会在#TempTable写入一行数据,再次执行时就会更新这行数据。

下面我们来看一下如何使用Merge Into语法来替代上面的代码。

Declare @StudentName As nvarchar(20)
Declare @SubjectName As nvarchar(20)
Declare @Score As int
Select @StudentName = N'小明'
Select @SubjectName = N'语文'
Select @Score = 88

Merge Into #TempTable T1
Using (Select * From (Values(@StudentName,@SubjectName,@Score)) TempTable(StudentName,SubjectName,Score)) T2 On T2.StudentName=T1.StudentName And T2.SubjectName=T1.SubjectName
When Matched Then
	Update Set T1.Score = T2.Score
When Not Matched Then
	Insert (StudentName,SubjectName,Score)
		Values (T2.StudentName,T2.SubjectName,T2.Score);

是不是感觉代码也没省多少,这只是对一行数据的操作,当需要大量数据写入更新时,我们将要更新的数据先写入临时表,再使用Merge Into语法进行更新时,效率会有很大提升。

SQL server Merge into MERGE 语句试图多次更新或删除同一行。目标行与多个源行匹配时会出现这种情况。MERGE 语句无法多次更新/删除目标表的同一行。请简化 ON 子句, SQLserver Merge into 的用法 在匹配Using 源表时,有时候会报异常消息 8672,级别 16,状态 1,第 1 行 MERGE 语句试图多次更新或删除同一行。目标行与多个源行匹配时会出现这种情况。MERGE 语句无法多次更新/删除目标表的同一行。请简化 ON 子句,针对这问题的解决办法一般是确保源表的on字段是唯一的。因为我们可以用distinct关键字,保证源表的On 字段的唯一性。 阅读详情

相关推荐

SQLServer中merge函数用法详解

Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。通过本篇文章给大家介绍sqlserver中merge函数用法详解,感兴趣的朋友一起学习吧

SqlServer中的merge into

今天学到了sqlserver中的merge into,在这里记录一下自己的学习过程。 首先我们要准备两个表。 随后贴出来的merge into代码,它会在插入时做检测,若表中已存在数据,会用新数据做更新,若表中不存在数据,会把新数据插入表中。 merge into [Test].[dbo].[merge_target] as t #merge into后的表被当做目标表 using [T...

crazy_rabbit_22的博客 6644

从零开始学习信号完整性(SIPI)--1 简介

信号完整性就是研究如何让驱动芯片发出的信号经过传输通道被接收芯片正确接收的学问。 信号完整性包含了三个要素: 信号:是被传输的主体,我们首先要了解、熟悉信号的特性。 芯片:分为驱动芯片和接收芯片,信号完整性工程师就是要实现信号在驱动芯片和接收芯片之间的正确传输。 传输通道:是传输信号的介质,是信号所走的“路”。如何实现信号的正确传输呢?那就要信号完整性工程师为信号“修路”、“搭桥”。

qq_29476769的博客 4万+

SQL Server MERGE INTO 语句优化

MERGE INTO 语句是 SQL Server 中一个强大的工具,用于在一个操作中同时完成插入、更新和删除操作。然而,不当的使用可能会导致性能问题。本文将详细介绍如何优化 MERGE INTO 语句,包括索引优化、批处理、事务管理等方面,并提供相应的代码示例。1. 基本语法首先,让我们回顾一下 MERGE INTO 语...

cnzzs的博客 2044

C# WinForm项目目录结构详解:从入门到精通(附常见问题解决方案)

本文详细解析了C# WinForm项目目录结构,从解决方案与项目基础结构到核心文件功能,再到关键目录解析,帮助开发者快速掌握WinForm项目组织方式。文章还提供了常见问题解决方案,如引用丢失、配置文件不生效等,是WinForm开发从入门到精通的实用指南。

dream的博客 647

封包(一)(雷电模拟器+ProxyDroid+查尔斯3.93+WPE)

自从换了工作就没有给大家分享一些干活,在加上陪伴自己的孩子没有时间更新文章了,这只能在晚上给大家写文档了,我最近在游戏公司上班,研究封包。我把这些东西都做成了笔记,我想有些东西是大家都想弄明白d ...

寒梅独自开 1万+

SQL Server 插入数据深度解析:从基础语法到高性能批量插入实战

在数据库操作中,数据插入是基础且核心的环节,它直接关系到事务完整性、数据一致性和系统性能。其原理涉及锁机制、日志记录和索引维护等底层机制。掌握高效的插入技术对于保障应用性能和数据质量具有重要价值,尤其在数据迁移、ETL流程和高并发写入等应用场景中。本文聚焦于SQL Server平台,深入探讨了BULK INSERT和表值参数等高性能批量插入方案,并解析了事务控制、约束处理等关键实践,旨在帮助开发者从工程实践角度优化数据写入效率,规避常见性能瓶颈。

chulilang8944的博客 337

因时机器人-灵巧手配置方案(Ubuntu18.04)

因时机器人-灵巧手配置方案(Ubuntu18.04)

CH_monsy的博客 3844

Replace into与Merge into的用法总结

MySQL中replace用法总结 插入一条数据,存在则不操作,不存在就插入(必须现有唯一键) 使用insert ignore语句: insert ignore into table(col1,col2) values ('a','b'); 这样一来,如果表中已经存在的数据,就不会插入,如果没有就会插入一条新数据。 插入一条数据,存在就更新,不存在就插入(必须现有唯一键) 这种有两种操作...

夜空中最亮的星 6922

Vivado工程芯片型号更换全流程:从IP更新到生成新bit文件(避坑指南)

本文详细介绍了Vivado工程中更换芯片型号的全流程,包括IP更新、约束文件适配和生成新bit文件的关键步骤。特别针对FPGA开发中常见的兼容性问题提供避坑指南,帮助开发者高效完成芯片迁移,确保设计稳定性和性能优化。

weixin_42549451的博客 297

Dify智能体开发:发布嵌入网站

Dify 支持将你的 AI 应用嵌入到业务网站中,你可以使用该能力在几分钟内制作具有业务数据的官网 AI 客服、业务知识问答等应用。点击 WebApp 卡片上的嵌入按钮,复制嵌入代码,粘贴到你网站的目标位置。

王国平的博客 3243

Merge into用法总结

简单的说就是,判断表中有没有符合on()条件中的数据,有了就更新数据,没有就插入数据。   有一个表T,有两个字段a、b,我们想在表T中做Insert/Update,如果条件满足,则更新T中b的值,否则在T中插入一条记录。在Microsoft的SQL语法中,很简单的一句判断就可以了,SQL Server中的语法如下:   if exists(select 1 from T where T.a='1001' ) update T set T.b=2 Where T.a=...

小屁孩大帅-保密的博客 2823

YOLOv10改进 | 主干篇 | 引入FasterNet:Run, Don‘t Walk,追求更快的神经网络

本文引入了 FasterNet 作为 YOLOv10 的主干网络。通过 PConv 算子,我们有效降低了模型的计算冗余。对于追求极致推理速度的场景(如树莓派、Jetson Nano),该改进方案极具价值。建议在训练时配合混合精度训练 (AMP)进一步加速。

weixin_51988935的博客 604

MERGE INTO语法

转自:http://blog.youkuaiyun.com/yuzhic/article/details/1896878   动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作。 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也就是说当存在记录时,就更新(Update),不存在数据时,就插入(Insert)。 实

Jane 8767

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

SQL server 中Merge Into的用法

从备份表中更新字段到正式表中,使用 UPDATE 批量更新大量的数据,会出现效率低下,有时候甚至卡死的情况,后面通过使用 MERGE INTO 代替 UPDATE 执行批量更新,会提升执行效率。 MERGE INTO语法如下: MERGE INTO table_name alias1 USING (table|view|sub_query) alias2 ON (join conditio...

一只小黄毛 2万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

oracle merge into与sqlserver merge into 比较

merge into: 在两个表之间,根据与源表联接的结果,对目标表执行插入、更新或删除操作。 Oracle在9i引入了merge into命令,SQL Server 2008也引入merge into。 不多说了,实例对比一下吧! oracle merge into: /* drop table a; drop table b; */ create table a (

4447

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

DB2—— Merge Into语句的使用三(进阶)

简单的说就是,判断表中有没有符合on()条件中的数据,有了就更新数据,没有就插入数据。   以下讲解了sql server 和oracle数据库的merge into用途,db2类似。 有一个表T,有两个字段a、b,我们想在表T中做Insert/Update,如果条件满足,则更新T中b的值,否则在T中插入一条记录。在Microsoft的SQL语法中,很简单的一句判断就可以了, SQL Server中的语法如下:   if exists(select 1 from T where T.a='1001

Gorden的博客 2688

SQL Server有则更新,无则插入操作之merge into

目 录1.场景2.实现 1.场景   sql server假设目标表rpt.tbb_student被前端报表无缝链接,或被其它库订阅,则在更新表rpt.tbb_student就不能用全删全插的理念,这个时候就会有个思路有则更新,无则插入的增量理念;   sql server天生就自带这种语法merge into,有的人疑问了,那我直接写两段语句,一段update,一段insert不行吗?答案当然是可以的,只是这种做法相对于merge into效率较低,不够优化,因为这样的两段语句需要扫描表两次,时间复杂度

LXWalaz1s1s的博客 1847

Merge Into 语句代替Insert/Update在Oracle中的应用实战

动机:想在Oracle中用一条SQL语句直接进行Insert/Update的操作。说明:在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也就是说当存在记录时,就更新(Update),不存在数据时,就插入(Insert)。实战:接下来我们有一个任务,有一个表T,有两个字段a,b,我们想在表T中做Insert/Update,如果存在,则更新T

窃破天道 8万+

SQL Server中 MERGE 语句

SQL Server 中,MERGE 语句用于根据两个表之间的条件来插入、更新或删除记录。

zxrhhm的博客 1707

merge into用法mysql_merge into用法

简单的说就是,判断表中有没有符合on()条件中的数据,有了就更新数据,没有就插入数据。有一个表T,有两个字段a、b,我们想在表T中做Insert/Update,如果条件满足,则更新T中b的值,否则在T中插入一条记录。在Microsoft的SQL语法中,很简单的一句判断就可以了,SQL Server中的语法如下:(推荐学习:MySQL视频教程)if exists(select 1 from T wh...

weixin_39943383的博客 4844

SQL Server 2008 Merge into

--创建测试表 CREATE TABLE t_A (MCLASS VARCHAR(20),SNO VARCHAR(20)) INSERT INTO t_A SELECT 'L-1','123' UNION ALL SELECT 'L-2','234' UNION ALL SELECT 'L-3','345' CREATE TABLE t_B (MCLASS VA

矫正的快乐人生 2686
上一篇: SQL Server逆透视表(UNPIVOT语法的使用)
下一篇: SQL Server 2012分页查询新语法
wangbin1008
博客等级 码龄22年 2粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值