SQL Server中 MERGE 语句

在 SQL Server 中,MERGE 语句用于根据两个表之间的条件来插入、更新或删除记录。它通常用于同步两个表的数据,其中一个表是源表(包含要插入或更新的数据),另一个是目标表(数据要插入或更新的表)。

1、本文内容

  • 语法
  • 参数
  • 备注
  • 触发器的实现
  • 权限
  • 有关索引的最佳做法
  • MERGE 的并发注意事项
  • 示例
  • 相关内容

适用于:

  • SQL Server
  • Azure SQL 数据库
  • Azure SQL 托管实例
  • Azure Synapse Analytics

根据与源表联接的结果,对目标表进行插入、更新或删除操作。 例如,根据与另一个表的区别,在一个表中插入、更新或删除行,从而同步两个表。

2、语法

SQL Server 和 Azure SQL 数据库的语法:

[ WITH <common_table_expression> [,...n] ]
MERGE[ TOP ( expression ) [ PERCENT ] ][ INTO ] <target_table> [ WITH ( <merge_hint> ) ] [ [ AS ] table_alias ]USING <table_source> [ [ AS ] table_alias ]ON <merge_search_condition>[ WHEN MATCHED [ AND <clause_search_condition> ]THEN <merge_matched> ] [ ...n ][ WHEN NOT MATCHED [ BY TARGET ] [ AND <clause_search_condition> ]THEN <merge_not_matched> ][ WHEN NOT MATCHED BY SOURCE [ AND <clause_search_condition> ]THEN <merge_matched> ] [ ...n ][ <output_clause> ][ OPTION ( <query_hint> [ ,...n ] ) ]
;<target_table> ::=
{[ database_name . schema_name . | schema_name . ] [ [ AS ] target_table ]| @variable [ [ AS ] target_table ]| common_table_expression_name [ [ AS ] target_table ]
}<merge_hint>::=
{{ [ <table_hint_limited> [ ,...n ] ][ [ , ] { INDEX ( index_val [ ,...n ] ) | INDEX = index_val }]}
}<merge_search_condition> ::=<search_condition><merge_matched>::={ UPDATE SET <set_clause> | DELETE }<merge_not_matched>::=
{INSERT [ ( column_list ) ]{ VALUES ( values_list )| DEFAULT VALUES }
}<clause_search_condition> ::=<search_condition>

3、参数

  • WITH common_table_expression<>
    指定在 MERGE 语句作用域内定义的临时命名结果集或视图,亦称为“公用表表达式”。 结果集派生自简单查询,并由 MERGE 语句引用。 有关详细信息,请参阅 WITH common_table_expression (Transact-SQL)。

  • TOP ( expression ) [ PERCENT ]
    指定受影响的行数或所占百分比。 expression 可以是行数或行百分比。 在 TOP 表达式中引用的行不是以任意顺序排列的。 有关详细信息,请参阅 TOP (Transact-SQL)。

    在整个源表和目标表联接,且不符合插入、更新或删除操作条件的联接行遭删除后,应用 TOP 子句。 TOP 子句进一步将联接行数减少到指定值。 这些操作(插入、更新或删除)以无序方式应用于其余联接行。 也就是说,在 WHEN 子句中定义的操作中,这些行是无序分布的。 例如,指定 TOP (10) 会影响 10 行。 在这些行中,可能会更新 7 行并插入 3 行,也可能会删除 1 行、更新 5 行并插入 4 行等。

    如果源表上没有筛选器, MERGE 语句可能会对源表执行表扫描或聚集索引扫描,以及对目标表进行表扫描或聚集索引扫描。 因此,即使使用 TOP 子句通过创建多个批处理来修改大型表,I/O 性能有时也会受到影响。 在这种情况下,请务必要确保所有连续批处理都以新行为目标。

  • database_name
    target_table 所在数据库的名称。

  • schema_name
    target_table 所属架构的名称。

  • target_table
    <table_source> 中的数据行根据 <clause_search_condition> 进行匹配的表或视图。 target_table 是由 MERGE 语句的 WHEN 子句指定的任何插入、更新或删除操作的目标。

    如果 target_table 为视图,则针对它的任何操作都必须满足更新视图所需的条件。 有关详细信息,请参阅通过视图修改数据。

    target_table 不得是远程表。 target_table 不能定义其中的任何规则。target_table 不能是内存优化表。

    可以将提示指定为 <merge_hint>。

  • [ AS ] table_alias
    用于为 target_table 引用表的替代名称。

  • USING <table_source>
    指定根据 <merge_search_condition> 与 target_table 中的数据行进行匹配的数据源。 此匹配的结果指出了要由 MERGE 语句的 WHEN 子句采取的操作。 <table_source> 可以是一个远程表,或者是一个能够访问远程表的派生表。

    <table_source> 可以是一个派生表,它使用 Transact-SQL 表值构造函数通过指定多行来构造表。

  • [ AS ] table_alias
    用于为 table_source 引用表的替代名称。

    有关此子句的语法和参数的详细信息,请参阅 FROM (Transact-SQL)。

  • ON <merge_search_condition>
    指定联接 <table_source> 与 target_table 以确定匹配位置所要满足的条件。

    注意

    请务必仅指定目标表中用于匹配目的的列。 也就是说

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/38108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索sklearn的贝叶斯奥秘:朴素贝叶斯分类器全解析

&#x1f680; 探索sklearn的贝叶斯奥秘&#xff1a;朴素贝叶斯分类器全解析 朴素贝叶斯分类器是一类基于贝叶斯定理的简单概率分类器&#xff0c;它们在文本分类、垃圾邮件识别等领域表现出色。在Python的sklearn库中&#xff0c;朴素贝叶斯分类器以其实现简单和效率高效而受…

关于响应式编程的理解与SpringCloudGateway的理解

关于响应式编程的理解与SpringCloudGateway的理解 一. 响应式编程与函数式编程的区别二. 响应式编程中常用的组件2.1 RxJava定义2.2 Rxjava基本概念2.3 RxJava 用法 三 SpringcloudGateway四 常见的四种限流规则 一. 响应式编程与函数式编程的区别 总的来说&#xff0c;响应式编…

qt中的枚举值-QMetaEnum

QMetaEnum 测试代码hcpp 讲解 测试代码 h #include <QMainWindow> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~M…

GPIO和PIN

文章目录 1 GPIO和Pin1.1 GPIO和Pin基础概念1.2 GPIO输入模式1.3 GPIO输出模式1.4 GPIO的HAL库1.4.1 一些HAL库表示1.4.2 HAL库常用GPIO函数1.4.3 GPIO点亮led灯程序例子 1 GPIO和Pin 1.1 GPIO和Pin基础概念 ​ 单片机有很多的引脚&#xff0c;为了操控每一个引脚&#xff0c…

grpc学习golang版( 四、多服务示例 )

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 第七章 客户端流式传输 第八章 双向流示例 文章目录 一、前言二、定义proto文件三、编写server服务端四、编写Client客…

MySQL之可扩展性(九)

可扩展性 直接连接 2.修改应用的配置 还有一个分发负载的办法是重新配置应用。例如&#xff0c;你可以配置多个机器来分担生成大报表操作的负载。每台机器可以配置成连接到不同的MySQL备库&#xff0c;并为第N个用户或网站生成报表。 这样的系统很容易实现&#xff0c;但如果…

使用Python自动化收集和处理视频资源的教程

在这篇教程中&#xff0c;我们将介绍如何利用Python脚本自动化收集和处理视频资源。这篇文章将帮助您掌握基本的网络自动化技术&#xff0c;并使用相关库进行视频资源的获取和保存。以下是具体的实现步骤和代码示例。 环境准备 在开始之前&#xff0c;请确保您的工作环境中已…

数据库基础教程

数据库基础教程 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在本文中&#xff0c;我们将深入探讨数据库的基础知识和操作&#xff0c;帮助您建立起扎实的数据…

Spring Boot集成jasypt快速入门Demo

1.什么是Jasypt&#xff1f; Jasypt&#xff08;Java Simplified Encryption&#xff09;是一个专注于简化Java加密操作的工具。 它提供了一种简单而强大的方式来处理数据的加密和解密&#xff0c;使开发者能够轻松地保护应用程序中的敏感信息&#xff0c;如数据库密码、API密…

stl的map和set

概念 map和set底层都是红黑树 set是key模型结构&#xff0c;本质就是看一个元素在不在容器中。 map是key/value结构&#xff0c;里面存了一个pair结构&#xff0c;可以通过一个值来查找另外一个值 map和set结构中遍历出来的都是有序并且去重了的&#xff0c;map和set都支持增…

Java高级重点知识点-17-异常

文章目录 异常异常处理自定义异常 异常 指的是程序在执行过程中&#xff0c;出现的非正常的情况&#xff0c;最终会导致JVM的非正常停止。Java处 理异常的方式是中断处理。 异常体系 异常的根类是 java.lang.Throwable&#xff0c;&#xff0c;其下有两个子类&#xff1a;ja…

【QT】概述|对象树模型|两种控件模式|信号和槽|lambda

目录 什么是QT 特点 QT程序 main函数 QT按钮 纯代码模式 图形化模式 对象树模型 信号和槽 连接与断开 自动连接 断开连接 信号的发射 lambda表达式 基本语法 捕获列表 Lambda表达式用于信号与槽的连接 例如 什么是QT Qt是一个跨平台的C图形用户界面应用…

NeXT-Server 手动安装

38 cd /home 使用 wget 下载你选择的版本,https://go.dev/dl/ 找到适用于Linux的版本,你可以选择 .tar.gz 格式的文件以用于Debian系统 39 wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz 40 tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz 42 echo ‘export PAT…

办理河南公司企业信用等级3A证书流程和条件

企业信用等级3A证书属于一种荣誉资质&#xff0c;是提升企业公信力和影响力保障的一项资质。信用等级是信用 (资信)评估机构根据企业资信评估结果对企业信用度划分的等级类别&#xff0c;它反映了企业信用度的高低。AAA信用等级是一种等级划分。代指企业的信用经过行业、机构评…

零成本搭建个人图床服务器

前言 图床服务器是一种用于存储和管理图片的服务器&#xff0c;可以给我们提供将图片上传后能外部访问浏览的服务。这样我们在写文章时插入的说明图片&#xff0c;就可以集中放到图床里&#xff0c;既方便多平台文章发布&#xff0c;又能统一管理和备份。 当然下面通过在 Git…

中药材图像识别:中医与深度学习的融合(目标检测)

亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 一、引…

flink的窗口

目录 窗口分类 1.按照驱动类型分类 1. 时间窗口&#xff08;Time window&#xff09; 2.计数窗口&#xff08;Count window&#xff09; 2.按照窗口分配数据的规则分类 窗口API分类 API调用 窗口分配器器&#xff1a; 窗口函数 增量聚合函数&#xff1a; 全窗口函数…

MySQL高级-MVCC-原理分析(RC级别)

文章目录 1、RC隔离级别下&#xff0c;在事务中每一次执行快照读时生成ReadView2、先来看第一次快照读具体的读取过程&#xff1a;3、再来看第二次快照读具体的读取过程: 1、RC隔离级别下&#xff0c;在事务中每一次执行快照读时生成ReadView 我们就来分析事务5中&#xff0c;两…

VBA代码解决方案第十五讲:如何对单元格区域进行高亮显示

《VBA代码解决方案》(版权10028096)这套教程是我最早推出的教程&#xff0c;目前已经是第三版修订了。这套教程定位于入门后的提高&#xff0c;在学习这套教程过程中&#xff0c;侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码…

Java中集中常见的算法

以下是对选择排序、冒泡排序和插入排序的理解及代码实现 选择排序&#xff1a; 理解&#xff1a;它通过不断地从待排序元素中选择最小&#xff08;或最大&#xff09;元素&#xff0c;并将其放置在已排序序列的一端。 代码实现&#xff1a; public class SelectionSort {pu…