SQLite c# - 没有主键或唯一键的INSERT或UPDATE

时间:2016-05-11 17:47:34

标签: c# sql database sqlite

假设我有2个数据库文件,主数据库和新数据库。每次发布新数据库文件时,用户都需要从新数据库更新主数据库。

  1. 如果找到某一行,例如客户名称是相同的,然后我需要 更新主数据库中的旧记录。
  2. 如果找不到,那么我需要在主数据库中插入新记录。
  3. 我尝试过的是从新数据库中选择所有行,然后使用reader.Read()逐行查看。在循环内部,我将检查更新sql是否返回-1,然后我将执行insert sql。

    上述方法存在性能问题,因为它需要遍历每一行才能执行更新或插入。我建议的解决方案是将新数据库附加到主数据库中,然后执行" INSERT或REPLACE表SELECT * FROM newdatabase.table"。

    但很快我意识到了一个问题。我实际上没有表中的主键,或者主键无助于决定INSERT或REPLACE。这是由于某些特定的客户要求。在这种情况下,我不能在没有主键的情况下使用INSERT或REPLACE,例如要比较的列(CustomerName)不是唯一键或主键。

    如果你有更好的解决方案,请告诉我,谢谢!

1 个答案:

答案 0 :(得分:-1)

为了插入缺失的行 - 并使用附加的数据库 - 你可以这样做:

插入表1(col2,col3,...)选择col2,col3,...
来自newdatabase.Table1,其中customername不在(从表1中选择customername)

这假设col1是主要的自动增量ID。您需要命名除此col1之外的所有列。对于更新,请在'中使用'客户名称执行类似的更新命令。