如果想要沒有資料時新增,有資料時更新或刪除,以前要先下Select來判斷Insert或Update或Delete,而Merge語法可節省這些步驟,一個語法全包了。
Merge是定義在Sql 2003的標準中
支援的DBMS
- Oracle9i以上
- MS SQL Server 2008 以上(慢了好幾年)。
- MySql 5.0 以上
每一個DBMS都有其擴充的地方,請自行參考。
語法
範例
1.有資料更新,沒資料新增
MERGE TableA AS target
USING (SELECT 'TestValue' ) AS source (ColumnA)
ON (target.ColumnA = source.ColumnA )
WHEN MATCHED THEN UPDATE SET ColumnA = 'TestValue'
WHEN NOT MATCHED BY TARGET THEN INSERT (ColumnA , ColumnB ) VALUES ('TestValue', 'TestValue')2.有資料刪除,沒資料新增
MERGE TableA AS target
USING (SELECT 'TestValue' ) AS source (ColumnA)
ON (target.ColumnA = source.ColumnA )
WHEN MATCHED THEN DELETE
WHEN NOT MATCHED BY TARGET THEN INSERT (ColumnA , ColumnB ) VALUES ('TestValue', 'TestValue')