SQL Server:使用MERGE进行多次INSERT

时间:2014-04-08 00:51:07

标签: sql-server sql-server-2008-r2 on-duplicate-key multiple-insert

我试图在MySQL数据库和SQL Server 2008 R2之间编写桥接来同步表中的值。我陷入SQL Server数据库的多插入值。通常在MySQL中我使用如下查询:

INSERT INTO table (column1, column2)
VALUES(value1, value2), (value3, value4)
ON DUPLICATE KEY UPDATE column2 = VALUES(value2);

有没有办法如何使用MERGE多次插入SQL Server?

感谢您的回答

2 个答案:

答案 0 :(得分:10)

MERGE INTO YourTable T
   USING ( VALUES ( 'value1', 'value9' ), 
                  ( 'value3', 'value4' ) ) AS S ( column1, column2 )
      ON T.column1 = S.column1
WHEN MATCHED THEN 
   UPDATE
      SET column2 = S.column2
WHEN NOT MATCHED THEN
   INSERT ( column1, column2 ) VALUES ( column1, column2 );

答案 1 :(得分:0)

不确定我的问题是否完全正确,但您可以在T-SQL中使用MERGE语句,如下所示:

  1. 如果源中的项目与指定字段中的目标项目不匹配,请插入目标。
  2. 如果源中的项目与指定字段中的目标项目匹配,请使用来自源的相应值更新目标中的其他字段。
  3. 在您的情况下,合并将是这样的:

    merge yourtable as target
    using
    (select value1 a, value2 b
     union
     select value3 a, value4 b) as source
     on target.column1 = source.a
     when matched and target.column2 <> source.b
     then update 
     set target.col2 = source.b
     when not matched by target
     then
     insert (column1, column2) values (source.a, source.b);
    

    此示例使用硬编码值,但是当您从另一个表插入时也可以使用。