小编Mik*_*wen的帖子

如何有效避免重复的密钥异常

我面临以下问题:

我正在尝试将sql-server中的表与多个外部数据库保持同步.这些外部数据库没有共享的唯一主键,因此本地表具有简单的整数PK.

现在,为了使本地表保持最新,完成以下操作:

  1. 查询外部数据库.
  2. 数据被转换为本地表的有效数据.
  3. 插入用于尝试将数据写入本地表.
  4. 如果insert返回重复的条目异常,则将通过select查询搜索PK,并且数据将通过更新查询写入表.
  5. 使用插入或更新的行的PK修改另一个表.

现在这个工作正常但对我来说似乎非常低效.大多数情况下,数据已经在本地表中,并导致插入上出现重复的键异常.这意味着需要处理许多异常,这很昂贵.此外,由于PK由DB管理,因此必须使用选择查询来查找要更新的行.

我该如何避免这种影响?我不想使用存储过程,因为我喜欢通过代码保持查询可管理并包含在版本控制中.

我看过合并,但我看到有太多人报告它的问题.

我想我需要使用一种upsert形式,但我不知道如何通过数据库管理PK来实现这一点.

tl; dr:我需要的是一个查询,它允许我插入或更新一行(取决于重复键或不重复),它总是返回行的PK.

c# database sql-server exception

5
推荐指数
1
解决办法
362
查看次数

标签 统计

c# ×1

database ×1

exception ×1

sql-server ×1