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.pswp.cn/diannao/38108.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38108.shtml
英文地址,請注明出處:http://en.pswp.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…