我试图构建这个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)
答案 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
不是target
或source
。
如果您尝试将变量(例如@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);
如果您诚实地尝试在tableB
和target
(值)不匹配时从source
插入,那么您很可能必须将merge
的两个部分分开{ {1}}陈述。