【问题标题】:SQL Server: multiple INSERT with MERGESQL Server:多个 INSERT 与 MERGE
【发布时间】:2014-04-08 00:51:06
【问题描述】:

将值多次插入 SQL Server 数据库的方法是什么?通常在 MySQL 中,我使用如下查询:

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

有没有办法使用MERGE 对 SQL Server 进行多次插入?

【问题讨论】:

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


    【解决方案1】:
    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 );
    

    【讨论】:

      【解决方案2】:

      不确定我是否完全正确地回答了您的问题,但您可以在 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);
      

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

      【讨论】:

        猜你喜欢
        • 2016-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-23
        • 1970-01-01
        • 2014-10-20
        • 2014-11-08
        相关资源
        最近更新 更多