You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用其他代码替换SQL Server 2012中的MERGE语句实现同等功能

替换SQL Server 2012 MERGE查询的等效实现

原MERGE语句的核心逻辑是针对ReprocessPRESs表,对指定@PRId的记录执行以下操作:

  • 插入@ESIds用户定义类型中存在、但表中未匹配的(PRId, ESId, CreateDate)记录
  • 删除表中属于该@PRId、但不在@ESIds中的记录

可以用分开的INSERT和DELETE语句实现完全等效的功能,代码如下:

插入操作

-- 插入目标表中不存在的指定PRId对应记录
INSERT INTO ReprocessPRESs WITH (ROWLOCK)
(PRId, ESId, CreateDate)
SELECT 
    @PRId AS PRId,
    Val AS ESId,
    GETDATE() AS CreateDate
FROM @ESIds
WHERE NOT EXISTS (
    SELECT 1
    FROM ReprocessPRESs
    WHERE PRId = @PRId
      AND ESId = Val
);

删除操作

-- 删除目标表中存在但不在@ESIds中的指定PRId记录
DELETE FROM ReprocessPRESs WITH (ROWLOCK)
WHERE PRId = @PRId
  AND NOT EXISTS (
      SELECT 1
      FROM @ESIds
      WHERE Val = ESId
  );

等效性说明

  • 插入语句通过NOT EXISTS筛选出原MERGE中WHEN NOT MATCHED BY TARGET的记录,确保仅新增未存在的条目
  • 删除语句通过NOT EXISTS匹配原MERGE中WHEN NOT MATCHED BY SOURCE的逻辑,清理不在传入集合中的旧记录
  • 保留了原语句的ROWLOCK锁提示,保证锁行为与原MERGE一致
  • 分开执行的方式避免了MERGE可能存在的并发隐患(如意外更新、锁升级),逻辑更直观清晰

内容的提问来源于stack exchange,提问作者Hemant Singh Sisodia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 06:35:06