首页 > 数据库 >SQL server MERGE 语句

SQL server MERGE 语句

时间:2024-01-16 15:01:09浏览次数:26  
标签:语句 NO 记录 server MERGE PrdNO BOM SQL

SQL server MERGE 语句

SQL server 的MERGE语句 等效于MySQL的on duplicate key update方法.

具体来说,MERGE语句会检查原数据表记录和目标表记录。如果记录在原数据表和目标表中均存在,则目标表中的记录将被原数据表中的记录所更新(执行Update操作);如果目标表中不存在的某(些)记录,在原数据表中存在,则原数据表的这(些)记录将被插入到目标表中(执行Insert操作)。

在Oracle 10g之前,merge语句支持匹配更新和不匹配插入两种简单的用法,在10g中Oracle对merge语句做了增强,增加了条件选项和DELETE操作。

MERGE 语句应用.在 SQL Server 中,如果你想在插入数据时处理重复键的情况,你可以使用 MERGE 语句。以下是一个示例,说明如何使用 MERGE 语句来处理重复键:

假设我们有一个名为 Sheet1 的表,其中包含 BOM_NOPrdNO 两个列。

MERGE INTO Sheet1 AS target  
USING (VALUES ('1', '晓明')) AS source (BOM_NO, PrdNO)  
ON (target.BOM_NO = source.BOM_NO) -- 这里可以添加其他条件来匹配键  
WHEN MATCHED THEN  
    UPDATE SET target.PrdNO = source.PrdNO  
WHEN NOT MATCHED THEN  
    INSERT (BOM_NO, PrdNO) VALUES (source.BOM_NO, source.PrdNO);

这个 MERGE 语句的工作原理如下:

  1. AS target 命名目标表并给别名T1
  2. 它首先通过 USING 子句定义了要插入的数据源(在这里是一个单行数据 ('1', '晓明');多行数据('1', '晓明'),('2', '黄晓'))。
  3. ON 子句定义了如何匹配目标表和源数据。在这个例子中,我们只根据 BOM_NO 列进行匹配。
  4. WHEN MATCHED THEN UPDATE 部分定义了当找到匹配的记录时应该执行的操作。在这里,我们更新 PrdNO 列的值。
  5. WHEN NOT MATCHED THEN INSERT 部分定义了当没有找到匹配的记录时应该执行的操作。在这里,我们插入新的记录。

这样,当插入的 BOM_NO 已经存在于 Sheet1 表中时,相应的记录将被更新;如果不存在,将插入新记录。

标签:语句,NO,记录,server,MERGE,PrdNO,BOM,SQL
From: https://www.cnblogs.com/xieshier/p/17967667

相关文章

  • SqlSugar入门
    SqlSugar入门创建对象你可以使用SqlSugarClient(new模式)或者 SqlSugarScope(单例) 对数据库进行增、删、查、改等功能注意:除了名字和使用模式不同,功能和API都一模一样SqlSugarClient(new模式)优点:性能比SqlSugarScope有5%左右提升缺点:db不能跨上下文使用,需要new......
  • docker mysql镜像
    https://hub.docker.com/_/mysql/dockerrun--namemysql\-eMYSQL_ROOT_PASSWORD=123456\--restart=always\-d\-p3306:3306\-eTZ=Asia/Shanghai\-eCHARACTER_SET_SERVER=utf8mb4\-eCOLLATION_SERVER=utf8mb4_unicode_ci\......
  • 【JMeter】jmeter 操作 mysql 数据库
    一、下载驱动包二、JDBC连接配置三、JDBCRequest1、单条查询语句2、多条查询语句3、增删改语句4、参数化sql语句5、占位符语句 本文内容基于如下测试环境:JMeter4.0版本Win7系统mysql-connector-java-5.1.7-bin.jar不同环境下可能会有不一致的地方。......
  • shell脚本检测mysql服务状态
    shell脚本检测mysql状态:通过多种方案实现方法一:netstat命令 方法二:ss命令 方法三:使用lsof监控端口 执行结果: ......
  • Windows RabbitMQ 安装-截止当前最新版本(rabbitmq-server-3.12.12)图文教程
    WindowsRabbitMQ安装(图文教程)WindowsRabbitMQ安装,截止当前最新版本(rabbitmq-server-3.12.12)图文教程,本文只是最简单的安装方法,旨在能快速使用,若需要更多的配置,则需要你自行查阅官方文档,或互联网搜索答案咯,哈哈哈哈本文安装步骤共分4步:第1步:下载RabbitMQ与依赖Erl......
  • jmeter jdbc操作myql数据库及mysql驱动下载
     mysql驱动下载https://dev.mysql.com/downloads/connector/j/   1、先安装mysql的驱动mysql-connector-java-5.1.7-bin.jar配置jdbc的connectionconfigurationDatabaseUrl:jdbc:mysql://xxx.xxx.xxx.xxx:3306/test?allowMultiQueries=true&serverTimezone=UTC&c......
  • 无涯教程-SQL - Views(视图)
    视图只不过是存储在数据库中且具有关联名称的SQL语句,视图实际上是以预定义的SQL查询的形式组成的临时表。创建视图数据库视图是使用CREATEVIEW语句创建的,可以从单个表,多个表或另一个视图创建视图。基本的CREATEVIEW语法如下-CREATEVIEWview_nameASSELECTcolumn1,......
  • Go+Gin+GOrm+MySql实现基础的增删改查
    一、概述本节使用Gin+GOrm+MySql实现基础的增删改查。主要是做一下记录防止后面忘记了可以翻看博客查看主要有两个.go文件1.main.go用于注册gin路由及初始化gorm操作数据库2.Result.go用于封装服务端返回给客户端的响应体二、代码示例1.main.go//go_......
  • 无涯教程-SQL - Truncate(清空表)
    SQLTRUNCATETABLE命令用于从现有表中删除完整数据。Truncate-语法TRUNCATETABLE命令的基本语法如下。TRUNCATETABLEtable_name;Truncate-示例考虑具有以下记录的CUSTOMERS表-+----+----------+-----+-----------+----------+|ID|NAME|AGE|ADDRES......
  • 一文让你对mysql索引底层实现明明白白
    开篇:图片是本人随笔画的,有点粗糙,望大家谅解,如有不妥之处,请联系我们,感谢一、索引到底是什么.索引是帮助mysql高效获取数据的排好序的数据结构.索引是存储在文件里的.数据结构:二叉树HASHBTREE   如果没有索引的话,循环一条一条的找,找一次就是一次IO,这样速度就会很慢......