SQL Server中的Merge關鍵字
Merge簡介
Merge關鍵字是一個神奇的DML關鍵字。它在SQL Server 2008被引入,它能將Insert,Update,Delete簡單的併為一句。MSDN對於Merge的解釋非常的短小精悍:”根據與源表聯接的結果,對目標表執行插入、更新或刪除操作。例如,根據在另一個表中找到的差異在一個表中插入、更新或刪除行,可以對兩個表進行同步。”,通過這個描述,我們可以看出Merge是關於對於兩個表之間的資料進行操作的。
Merge的使用場景:
- 資料同步
- 資料轉換
- 基於源表對目標表做Insert,Update,Delete操作
Merge關鍵字的一些限制
- 使用Merge關鍵字只能更新一個表
- 源表中不能有重複的記錄
Merge使用示例
1.Merge示例
首先建立源表和目標表,並插入相關的資料,如圖1所示。
下面寫一個簡單的Merge示例
MERGE INTO T_B AS B
USING T_A AS A ON B.id=A.ID
WHEN MATCHED --當B.id=A.ID時,更新目標表
THEN UPDATE SET B.name=A.name,B.Remark='更新記錄'
WHEN NOT MATCHED --若目標表中不存在,則新源表記錄插入目標表
THEN INSERT(id,name,book,remark) VALUES(A.id,A.name,A.book,'從源表新增')
WHEN NOT MATCHED BY SOURCE --源表中不存在,目標表存在
THEN DELETE;
執行前記錄:
2.Output子句
Merge語句還有一個強大的功能是通過OUTPUT子句,可以將剛剛做過變動的資料進行輸出。我們在上面的Merge語句後加入OUTPUT子句,如圖所示。
--Merge Output
MERGE INTO T_B AS B
USING T_A AS A ON B.id=A.ID
WHEN MATCHED --當B.id=A.ID時,更新目標表
THEN UPDATE SET B.name=A.name,B.Remark='更新記錄'
WHEN NOT MATCHED --若目標表中不存在,則新源表記錄插入目標表
THEN INSERT(id,name,book,remark) VALUES(A.id,A.name,A.book,'從源表新增')
WHEN NOT MATCHED BY SOURCE --源表中不存在,目標表存在
THEN DELETE
OUTPUT $ACTION AS [ACTION],Inserted.id AS 插入的ID,Inserted.name 插入的Name,
Deleted.id AS 刪除的ID,Deleted.name AS 刪除的Name;
輸出結果:3.其它條件組合使用
3.1 TOP約束
我們還可以使用TOP關鍵字限制目標表被操作的行。在上例的語句基礎上加上了TOP關鍵字,我們看到只有指定行被執行。
3.2AND附加限制條件
注意:
1.不能有多個 MATCHED
和 Not MATCHED,即使是加and 條件的也不行,只給有一次。
2.NOT
MATCHED BY SOURCE 可以加條件出現多次,但不帶and 條件限制的NOT MATCHED BY SOURCE 必須出現在帶and 條件的後面。
SQL語句
執行前源表與目標表記錄:
執行後目標表結果:
相關文章
- sql server merge 的用法SQLServer
- SQL Server 和 MySql 語法和關鍵字的區別ServerMySql
- 【SQL】13 SQL 別名、SQL 連線(JOIN)、SQL INNER JOIN 關鍵字、SQL LEFT JOIN 關鍵字、SQL RIGHT JOIN 關鍵字、SQL FULL OUTER JSQL
- T-SQL with關鍵字SQL
- SQL 中的一些小巧但常用的關鍵字SQL
- JAVA中的關鍵字Java
- javascript中的with關鍵字JavaScript
- SQL Server 2008中的新語句:MERGESQLServer
- java中this關鍵字Java
- JavaScript中this關鍵字JavaScript
- 保留關鍵字 (Transact-SQL)SQL
- SQL INNER JOIN 關鍵字 用法SQL
- mysql 中的explain關鍵字MySqlAI
- java中this關鍵字的用法Java
- java中的static關鍵字Java
- SQL中Merge的用法SQL
- 完全理解JavaScript中的this關鍵字JavaScript
- java中的instanceof關鍵字Java
- Java中的各種關鍵字Java
- 在Java中this關鍵字的使用Java
- Java中transient關鍵字的作用Java
- java中static關鍵字的作用Java
- Java中的static關鍵字解析Java
- 說說iOS中的常用的關鍵字static ,class(僅限Swift關鍵字)iOSSwift
- typescript 中的 infer 關鍵字的理解TypeScript
- sql server merge 做insert和updateSQLServer
- 三個影響SQL Server效能關鍵點SQLServer
- 搜尋Oracle DDL中的關鍵字Oracle
- C++中的 const 關鍵字C++
- java中native關鍵字的用法Java
- C++中的10個關鍵字C++
- Java中的關鍵字和保留字Java
- C++中的typeid關鍵字C++
- 搜尋檔案中的關鍵字
- Java中final關鍵字Java
- Java中this與super關鍵字Java
- ORACLE中ESCAPE關鍵字用法Oracle
- C++中static關鍵字C++