SQL Server 中单行 MERGE/upsert 的语法

2024-01-09

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

任何人都可以修复我的语法吗:

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

我终于使用了 Upsert 语法MERGE在 SQL Server 2008 中。使用什么 Jacobwanted要做的事(更新插入):

IF EXISTS(SELECT * FROM member_topic WHERE mt_member = 0 AND mt_topic = 110)
BEGIN
    --update existing row
    UPDATE member_topic SET mt_notes = 'test'
    WHERE mt_member = 0
    AND mt_topic = 110
END
ELSE
BEGIN
    --insert new row
    INSERT INTO member_topic (mt_member, mt_topic, mt_notes)
    VALUES (0, 110, 'test')
END

相当于MERGE语法是:

MERGE member_topic
USING ( 
    VALUES (0, 110, 'test')
) AS foo (mt_member, mt_topic, mt_notes) 
ON member_topic.mt_member = foo.mt_member 
   AND member_topic.mt_topic = foo.mt_topic
WHEN MATCHED THEN
   UPDATE SET mt_notes = foo.mt_notes
WHEN NOT MATCHED THEN
   INSERT (mt_member, mt_topic, mt_notes)
   VALUES (foo.mt_member, foo.mt_topic, foo.mt_notes)
; --A MERGE statement must be terminated by a semi-colon (;).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 中单行 MERGE/upsert 的语法 的相关文章

  • MySQL 到 SQL Server 传输数据

    我需要将 MySQL 数据库中已存在的数据转换为 SQL Server 数据库 这里需要注意的是 旧数据库设计得很糟糕 但新数据库采用了正确的 3N 形式 有人对如何做到这一点有任何建议吗 我有 SSMS 2005 我可以使用它连接到 My
  • 如何根据条件选择列?

    我有一个名为 status 的变量 我在此 select 语句之前设置了它 Select ordr num as num ordr date as date ordr ship with as shipwith From order whe
  • IN SQL Server 是 CLR 线程安全的

    我在 SQL Server 和 Exchange Web 服务之间的 CLR 中有一个接口 用于在应用程序之间同步和发送电子邮件 在测试中它可以正常工作 没有任何问题 我们在生产环境中发现了零星问题 其中较长的 Web 服务任务似乎重叠 我
  • 什么是“具有指定instance_id的DacInstance不存在。(Microsoft SQL Server,36004)”?

    我正在尝试使用 dacpac 升级远程 SQL Server 2012 数据库 但收到以下消息 指定instance id 的DacInstance 不存在 微软 SQL Server 36004 我试图在互联网上搜索但找不到任何东西 有任
  • Power Query 根据 Excel 列列表过滤 SQL 视图

    有没有办法使用 Power Query 根据 Excel 表列中的值列表过滤 SQL 视图 我有一个返回大量数据 数百万条记录或属性 的 SQL 视图 用户希望根据属性 ID 的 Excel 表格列进行过滤 我知道我可以根据 Power 查
  • SQL Server 2016升级到13.0.15700.28版本后频繁出现System.OutOfMemoryException

    我在具有多个显示器 16 GB DDR4 RAM 4 Ghz I7 GTX 970 的开发盒上运行 Windows 10 Pro 64 位 我使用 SQL Server 2016 Developer Edition 和 VS 2015 En
  • SQL LIKE 运算符在应该显示任何结果时没有显示任何结果

    我有一个包含大量信息的车辆表 但其中一列是 MSSQL 表中的 所有者 但我使用时无法选择其中一个所有者LIKE但如果我可以使用 Silkeborg Distributionscenter 是所有者 是的 表和参数中都有一个双空格 所以参数
  • 如何使用Java 8中的方法引用进行Map合并?

    我有以下两种调用收集操作的形式 两者都返回相同的结果 但我仍然不能完全依赖方法引用并且需要 lambda
  • 连接别名计算列中的行

    我有两张表 一张名为 Car 一张名为 Mileage 汽车表有以下列 CarName varchar max 里程表有以下列 CarMileage int CarName varchar max TotalGasTrips int 我的代
  • 如何将 ROW_NUMBER() 分配给列?

    看完之后这个问题 https stackoverflow com questions 1293390 sql to output line number in results of a query 我还有一个类似的问题 有没有一种简单的方法
  • 仅当列不为 NULL 时才连接列

    我有一个像这样的 SQL Server 表 PERSON NAME PHONE PHONE1 PHONE2 PHONE CONCAT Name1 12345 Null Null Null
  • SQL查询获取列的精度值

    我需要一个 SQL 查询来获取某些列的精度值 我主要关心十进制类型列 并且我需要相同的精度值 我意识到在某些版本和数据库服务器供应商中可以这样做 如果您能列出其中的一些 那就太好了 对于 SQL 服务器 select precision f
  • SQL Case 语句会失败吗?

    有没有办法让 SQL 中的 CASE 语句像 C 中的 case 语句一样失败 我不想做的是下面的例子 但如果这是我唯一的选择 我想我会选择它 EXAMPLE NewValue CASE WHEN MyValue 1 THEN CAST M
  • SQL:从单个查询列出多对多

    我有 3 个表 分别代表 Users Roles 和多对多 UsersInRoles 键为 UserId RoleId 相关列 用户名 角色名 在管理 html 应用程序中 我想显示所有用户及其所在角色的列表 我尝试从 SQL 构建一个将返
  • 存储过程 EXEC 与 sp_executesql 的区别?

    我写了两个存储过程 其中一个是sp executesql而其他没有 sp executesql 两者都正确执行相同的结果 我不明白两者之间有什么区别 EXEC SQL 与 EXEC sp executesql SQL N eStatus v
  • 开发和生产 SQL Server 之间使用不同的排序规则会出现哪些问题?

    盘问 无法更新 sys columns 还有其他方法吗 https stackoverflow com questions 4018347 unable to update sys columns any other approach含糊地
  • 即使在不活动状态下,Hangfire 也会继续运行 SQL 查询

    我正在开发一个 ASP net MVC 5 网站 并使用 Hangfire 来安排一些任务 在本例中每 3 分钟一次 我知道一个事实是 运行这样的任务 以及与之相关的数据库查询 只需要几秒钟 我面临的问题是 Hangfire 似乎让我的 S
  • SQL Server 中不需要的日期时间舍入

    我遇到了一些看起来很奇怪的事情 SQL Server 似乎正在舍入一些DateTime当我将它们保存到时 值不合适datetime列 我怀疑我错过了一些东西 但我找不到它 我正在使用 NET 4 0 针对 SQL Server 2008 运
  • 如何在 SQL Server 会话中设置自动提交?

    如何在 SQL Server 会话中设置自动提交 您可以通过将implicit transactions设置为OFF来打开自动提交 SET IMPLICIT TRANSACTIONS OFF 当设置为ON时 返回隐式事务模式 在隐式事务模式
  • SQL Server:比较两个表中的列

    我最近完成了从某些应用程序的旧版本到当前版本的迁移 在迁移数据库时遇到了一些问题 我需要一个可以帮助我比较两个表中的列的查询 我的意思不是行中的数据 我需要比较列本身来弄清楚我错过了表结构的哪些变化 看一下红门 SQL 比较 http ww

随机推荐

  • 无法解析延迟后的方法

    好吧 这是我的代码 final TextToSpeech ttv new TextToSpeech MainActivity this new TextToSpeech OnInitListener public void onInit i
  • 获取手机屏幕中心坐标

    有人可以给我一个如何获取当前显示屏幕的中心坐标的例子吗 我希望我的对象始终相对于活动视图的中心坐标 你可以尝试使用DisplayMetrics实现您的解决方案 int mWidth this getResources getDisplayM
  • 为什么我无法连接到本地主机 django 开发服务器?

    我正在创建一个 django 应用程序并正在设置本地测试环境 我可以成功得到manage py runserver工作但将我的浏览器指向任何变体http 127 0 0 1 8000 http 0 0 0 0 8000 or http lo
  • Java 同步块/代码上的线程访问

    我正在读书同步 http javarevisited blogspot com 2011 04 synchronization in java synchronized html在职的 这是示例 public class Singleton
  • 将 Instant 转换为 LocalDateTime 时的不同值

    我从服务器收到 UTC 格式的时间 我解析为Instant对象 然后将其转换为LocalDateTime 就像这样 fun String toLocaleDateTime LocalDateTime return LocalDateTime
  • Spring Data JPA 存储库:派生查询中的 IN 子句不起作用

    我有一个看起来像这样的存储库 public interface UserRepository extends JpaRepository
  • UICollectionView - 一次一个单元格的水平分页

    我正在尝试使用 collectionView 实现类似轮播的效果 我实施了UICollectionView并将其设置为显示单元格水平地 唯一的问题是我怎样才能只允许出现一个单元格并将该单元格放在屏幕上居中 注意 分页已启用 我找到了这段代码
  • 使用 ScrollViewer 单击并拖动滚动

    我想允许使用单击并拖动滚动ScrollViewer 即单击ScrollViewer并向上或向下拖动 它会相应滚动 我有一个StackPanel嵌套在一个ScrollViewer我已经可以滚动了 我相信我在某处看到过这个答案 但我似乎再也找不
  • 无法使用 netbeans 将 master 分支推送到 git 存储库

    我刚刚安装了 netbeans 并通过 ssh 连接到我的 git 存储库 除了推送主分支之外 一切正常 每次我在 master 分支上提交一些更改并尝试推送分支时 我都会收到此弹出窗口 There were errors during t
  • 在不知道参数名称的情况下打印所有 POST 请求参数

    如何使用 Python 和 Flask 打印通过 POST 请求传入的所有参数 我知道如何按名称请求参数 from flask import request key request args get key 但我不确定为什么这对我不起作用
  • 服务器的安全 ajax GET/POST 请求

    假设我使用某种 API 和我的文件服务器 php处理与 API 服务的连接 在我的客户端 我使用 AJAX 调用 如下所示 http url server server php method GET data getContent true
  • PostgreSQL 聚合或窗口函数仅返回最后一个值

    我在 PostgreSQL 9 1 中使用带有 OVER 子句的聚合函数 并且我想仅返回每个窗口的最后一行 这last value 窗口函数听起来好像它可以做我想要的事情 但事实并非如此 它为窗口中的每一行返回一行 而我只想每个窗口一行 一
  • 如何将网页另存为图像

    我有一个带有网页源的字符串 我怎样才能将它保存在 byte 中作为图像 Here http pietschsoft com post 2008 07 C Generate WebPage Thumbmail Screenshot Image
  • 哪些产品支持 3 位数区域子标签,例如拉丁美洲西班牙语的 es-419?

    哪些产品支持 3 位数区域子标签 例如拉丁美洲西班牙语的 es 419 除了更常见的 es 或 es ES 之外 网络浏览器 翻译工具和翻译人员是否熟悉这些数字代码 我已经访问过以下页面 W3C 选择语言标签 http www w3 org
  • Mathematica:删除图形基元

    鉴于g是一个具有基元的图形对象 例如Lines and Polygons 如何删除其中一些 要向现有图形对象添加更多图元 我们可以使用Show 例如 Show g g2 where g2是另一个具有其他图元的图形对象 但是如何删除不需要的原
  • FOSUserBundle:找不到安全性的路由:登录

    几天前我在这里发布了一个问题 FOSUserBundle 嵌入登录表单并选择其模板 https stackoverflow com questions 8040512 fosuserbundle embedding the login fo
  • lombok 包不存在

    我使用的是 IntelliJ IDEA 2018 2 5 社区版 以下是完整的详细信息 Build IC 182 4892 20 built on October 16 2018 JRE 1 8 0 152 release 1248 b19
  • Rstudio tcltk 包的特定问题

    我正在尝试编译一个提示用户输入的交互式代码 我将 tcltk 包用于各种对话框 一切似乎都工作正常 直到今天它停止工作 应该注意的是 a 我没有在配置方面进行任何更改 b 它只是在 RStudio 中停止工作 但在 R 中仍然可以工作 假设
  • 使用 Maven 构建时出现“负时间”错误(在 Netbeans 中)

    在 Netbeans 8 0 2 3 0 5 中使用 Maven 我收到以下 奇怪的 错误 Failed to execute goal org apache maven plugins maven war plugin 2 3 war d
  • SQL Server 中单行 MERGE/upsert 的语法

    我正在尝试在表上执行单行插入 更新 但所有示例都是针对集合的 任何人都可以修复我的语法吗 MERGE member topic ON mt member 0 AND mt topic 110 WHEN MATCHED THEN UPDATE