如果想要沒有資料時新增,有資料時更新或刪除,以前要先下Select來判斷Insert或Update或Delete,而Merge語法可節省這些步驟,一個語法全包了。
Merge是定義在Sql 2003的標準中
支援的DBMS
- Oracle9i以上
- MS SQL Server 2008 以上(慢了好幾年)。
- MySql 5.0 以上
每一個DBMS都有其擴充的地方,請自行參考。
語法
MERGE INTO
table_name
USING
table_name
ON (
condition)
WHEN MATCHED THEN UPDATE SET
column1 =
value1 [,
column2 =
value2 ...]
WHEN NOT MATCHED THEN INSERT (
column1 [,
column2 ...])
VALUES (
value1 [,
value2 ...])
範例
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')
參考資料
Merge (SQL) - Wikipedia
MERGE (Transact-SQL)
Permanent Link to MERGE command enhancements in Oracle 10g