SQL Server:使用MERGE进行多个INSERT

10

如何在SQL Server数据库中进行多个值的插入?通常在MySQL中,我使用以下查询:

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

有没有一种方法可以使用 MERGE 一次性在 SQL Server 中执行多个插入操作?

2个回答

14
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 );

0

不确定我是否完全理解了你的问题,但是你可以按照以下方式在 T-SQL 中使用 MERGE 语句:

  1. 如果源中的项目与目标中指定字段上的项目不匹配,则插入到目标中。
  2. 如果源中的项目与目标中指定字段上的项目匹配,则使用源中相应值更新目标中的其他字段。

在你的情况下,合并操作可能如下所示:

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);

这个例子使用了硬编码的值,但是当你从另一个表插入时也同样适用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接