我正尝试在一个表上执行单行插入/更新,但所有的示例都是针对集合的。
有谁能修正我的语法吗?
MERGE member_topic ON mt_member = 0 AND mt_topic = 110
WHEN MATCHED THEN UPDATE SET mt_notes = 'test'
WHEN NOT MATCHED THEN INSERT (mt_member, mt_topic, mt_notes) VALUES (0, 110, 'test')
每个marc_s的解析是将单行转换为子查询-这让我认为MERGE命令并不是真正用于单行插入。
MERGE member_topic
USING (SELECT 0 mt_member, 110 mt_topic) as source
ON member_topic.mt_member = source.mt_member AND member_topic.mt_topic = source.mt_topic
WHEN MATCHED THEN UPDATE SET mt_notes = 'test'
WHEN NOT MATCHED THEN INSERT (mt_member, mt_topic, mt_notes) VALUES (0, 110, 'test');
发布于 2010-03-20 02:02:42
基本上,你是在正确的轨道上--但是你缺少一个你想要合并数据的源--尝试这样做:
MERGE
member_topic AS target
USING
someOtherTable AS source
ON
target.mt_member = source.mt_member
AND source.mt_member = 0
AND source.mt_topic = 110
WHEN MATCHED THEN
UPDATE SET mt_notes = 'test'
WHEN NOT MATCHED THEN
INSERT (mt_member, mt_topic, mt_notes) VALUES (0, 110, 'test')
;
对于单行合并没有特殊的语法-您所需要做的就是使用适当的子句。有了ON
子句中的适当条件,就可以将源文件限制为一行--这没问题。
别忘了后面的分号!不是开玩笑--这很重要!
有关MERGE
的一个非常好的介绍,请参阅this blog post。
https://stackoverflow.com/questions/2479488
复制相似问题