Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:带合并的多个插入_Sql Server_Sql Server 2008 R2_On Duplicate Key_Multiple Insert - Fatal编程技术网

Sql server SQL Server:带合并的多个插入

Sql server SQL Server:带合并的多个插入,sql-server,sql-server-2008-r2,on-duplicate-key,multiple-insert,Sql Server,Sql Server 2008 R2,On Duplicate Key,Multiple Insert,我正在尝试编写MySQL数据库和SQLServer2008R2之间的桥接,以同步表中的值。我在SQL Server数据库中多次插入值时遇到困难。通常在MySQL中,我使用如下查询: INSERT INTO table (column1, column2) VALUES(value1, value2), (value3, value4) ON DUPLICATE KEY UPDATE column2 = VALUES(value2); 有没有一种方法可以使用MERGE在SQLServer中执行多

我正在尝试编写MySQL数据库和SQLServer2008R2之间的桥接,以同步表中的值。我在SQL Server数据库中多次插入值时遇到困难。通常在MySQL中,我使用如下查询:

INSERT INTO table (column1, column2)
VALUES(value1, value2), (value3, value4)
ON DUPLICATE KEY UPDATE column2 = VALUES(value2);
有没有一种方法可以使用MERGE在SQLServer中执行多次插入


感谢您的回答

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

如果源中的项与指定字段中目标中的项不匹配,请插入目标。 如果源中的项与指定字段中的目标中的项匹配,请使用源中的相应值更新目标中的其他字段。 在您的情况下,合并如下:

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);
本例使用硬编码的值,但在从另一个表插入时也可以使用

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