SQL Server中的Merge關鍵字

2021-07-26 21:26:02 字數 2267 閱讀 9004

merge關鍵字是乙個神奇的dml關鍵字。它在sql server 2008被引入,它能將insert,update,delete簡單的並為一句。msdn對於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;

執行前記錄:

執行後b表記錄:

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語句

輸出結果如下圖:

執行前源表與目標表記錄:

執行後目標表結果:

Git中pull對比fetch和merge

使用git fetch和git pull都可以更新遠端倉庫的 到本地,但是它們之間還是有區別。今天搜了一下git pull和fetch,發現資訊量很大,牽扯到git中很多概念,以我這種智商估計要完全理解很困難,所以先宣告一下,下面的內容是我綜合了網上的資料後,自己的理解,如有誤導,敬請諒解。首先,我...

SQL Server中的查詢

本博文簡單介紹一下sql server中常用的幾類查詢及相關使用的方法。一 executescalar方法獲取單一值 executescalar方法是sqlcommand類的方法之一,執行查詢,並返回查詢所返回的結果集中的第一行第一列。csharp view plain copy print cla...

SQL Server中row number的用法

row number 函式將針對select語句返回的每一行,從1開始編號,賦予其連續的編號。在查詢時應用了乙個排序標準後,只有通過編號才能夠保證其順序是一致的,當使用row number函式時,也需要專門一列用於預先排序以便於進行編號。row number 常用的幾種情況 1.使用row numb...