SQL Server:如何在MERGE STATEMENT的INSERT子句中使用SELECT结果?

时间:2017-11-09 16:34:06

标签: sql-server tsql

我试图构建这个MERGE语句以使用INSERT子句中其他表的结果,但是SQL Server抱怨语法。有谁知道正确的语法是什么?

MERGE INTO tableA AS target
USING (VALUES(@value1, @value2, @value3)) AS source (column1, column2, column3) ON (source.column1 = target.column1)

WHEN MATCHED
    THEN 
       UPDATE SET column2 = @value2

WHEN NOT MATCHED
  THEN 
      INSERT (column1, column2, column3) 
      (SELECT TOP 1 column1, column2, column3
       FROM tableB
       WHERE column1 = @value1) 

1 个答案:

答案 0 :(得分:0)

问题中的语法有两个问题。

1)when not matched then之后是insert / select显示。

INSERT (column1, column2, column3) 
  (SELECT TOP 1 column1, column2, column3
  FROM  tableB
  WHERE   column1 = @value1)

2)上面的select语句引用的tableB不是targetsource

如果您尝试将变量(例如@value1)中的值添加到表中,则merge语句应如下所示。

MERGE INTO tableA AS target
  USING (
    VALUES(@value1, @value2, @value3)
  ) AS source (column1, column2, column3)
  ON (source.column1 = target.column1)
  WHEN MATCHED
    THEN UPDATE SET
      target.column2 = source.column2
  WHEN NOT MATCHED
  THEN 
  INSERT values (source.column1, source.column2, source.column3);

如果您诚实地尝试在tableBtarget(值)不匹配时从source插入,那么您很可能必须将merge的两个部分分开{ {1}}陈述。