首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL Server中单行MERGE / upsert的语法

SQL Server中单行MERGE / upsert的语法
EN

Stack Overflow用户
提问于 2010-03-20 01:57:13
回答 1查看 45.2K关注 0票数 65

我正尝试在一个表上执行单行插入/更新,但所有的示例都是针对集合的。

有谁能修正我的语法吗?

代码语言:javascript
复制
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命令并不是真正用于单行插入。

代码语言:javascript
复制
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');
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-20 02:02:42

基本上,你是在正确的轨道上--但是你缺少一个你想要合并数据的源--尝试这样做:

代码语言:javascript
复制
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

票数 47
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2479488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档