merge關鍵字是乙個神奇的dml關鍵字。它在sql server 2008被引入,它能將insert,update,delete簡單的並為一句。msdn對於merge的解釋非常的短小精悍:」根據與源表聯接的結果,對目標表執行插入、更新或刪除操作。例如,根據在另乙個表中找到的差異在乙個表中插入、更新或刪除行,可以對兩個表進行同步。」,通過這個描述,我們可以看出merge是關於對於兩個表之間的資料進行操作的。
可以想象出,需要使用merge的場景比如:
首先是更加短小精悍的語句,在sql server 2008之前沒有merge的時代,基於源表對目標表進行操作需要分別寫好幾條insert,update,delete。而使用merge,僅僅需要使用一條語句就好。下面我們來看乙個例子。
首先建立源表和目標表,並插入相關的資料,如下所示。
--建立源表
create table sourcetable(id int,[desc] varchar(50))
--建立目標表
create table targettable(id int ,[desc] varchar(50))
--為源表插入資料
insert into dbo.sourcetable(id,[desc]) values(1,'描述1')
insert into dbo.sourcetable(id,[desc]) values(2,'描述2')
insert into dbo.sourcetable(id,[desc]) values(3,'描述3')
insert into dbo.sourcetable(id,[desc]) values(4,'描述4')
insert into dbo.sourcetable(id,[desc]) values(5,'描述5')
--為目標表插入資料
insert into dbo.targettable(id,[desc]) values(1,'在源表裡不存在,將會被刪除')
insert into dbo.targettable(id,[desc]) values(2,'在源表裡不存在,將會被刪除')
insert into dbo.targettable(id,[desc]) values(3,'在源表裡不存在,將會被刪除')
insert into dbo.targettable(id,[desc]) values(4,'在源表裡不存在,將會被刪除')
insert into dbo.targettable(id,[desc]) values(5,'在源表裡不存在,將會被刪除')
insert into dbo.targettable(id,[desc]) values(6,'在源表裡不存在,將會被刪除')
insert into dbo.targettable(id,[desc]) values(7,'在源表裡不存在,將會被刪除')
下面我們來寫乙個簡單的merge語句,如下所示。 SQL同步主子表資料
主表不同資料 select from bd taba where tabaid not in select tabaid from fwq taba 子表不同資料 select b.from bd tabb b join bd taba a on a.tabaid b.tabaid where a....
SQL 資料庫 同步(二)
二 受到老同事資料庫同步軟體的啟發,我製作了乙個基於觸發器的同步。基本風格和老同事的一樣,我們還是先來看介面 繼續沿用了前人的智慧型。第一次介面跳轉時,需要的時間比較長。後台工作比較多 剛剛幾個圖形不好擷取,就是工具裡面的,包括 表比較,完整備份,差異備份和增量備份。這個資料庫同步實現的原理是 在主...
Logstash同步sql資料到Es
安裝好elasticsearch和logstash 把mysql驅動放到logstash的bin目錄下新建的資料夾mysq test下 在mysql test資料夾下面建立mysql.config檔案 input jdbc filter output stdout mysql.sql檔案如下 sel...