【问题标题】:Db2: How to insert new and update existing data?Db2:如何插入新数据和更新现有数据?
【发布时间】:2018-01-29 17:31:25
【问题描述】:

我正在使用 IBM Db2 数据库系统。我有一个包含 3 列(1 个主键和其他)的表,我在从 CSV 文件读取后填充这些列。有时我会从我的文件中得到重复的数据,所以在这种情况下我需要忽略它。

我的问题是我找不到正确的 Db2 SQL 语句来执行插入或更新。使用我当前的解决方案,我的代码中出现异常:

DB2 SQL 错误:SQLCODE=-803,SQLSTATE=23505, SQLERRMC=1;DB2INST1.TI_APGROUP_0, DRIVER=4.12.55

有INSERT 或UPDATE 的简单方法吗?

【问题讨论】:

    标签: sql merge db2 insert-update


    【解决方案1】:

    Db2 中的IMPORT 命令有一个INSERT_UPDATE 选项。你可以在这里阅读IMPORT command。

    如果您的数据已经在数据库中,请考虑使用MERGE 语句。

    两者,在它们的上下文中,根据某些规则插入新数据和更新现有数据。

    【讨论】:

    • 我正在尝试这个查询:MERGE INTO KDDBD01.KDTCTCT AS CT USING (SELECT ADR_MAIL_UTIL FROM KDDBD01.KDTCTCT) AS CT1(ADR_MAIL_UTIL) ON (CT.ADR_MAIL_UTIL = CT1.ADR_MAIL_UTIL) WHEN NOT MATCHED THEN INSERT (CT.ADR_MAIL_UTIL) VALUES ('Boite mail generique') 但我得到了Warning: DB2 SQL Warning: SQLCODE=100, SQLSTATE=02000, SQLERRMC=null, DRIVER=4.12.56 SQLState: 02000 ErrorCode: 100
    • 该警告 (SQLCODE = 100) 仅表示未找到任何行。这不是错误。
    • 是的,我想这是因为SELECT ADR_MAIL_UTIL FROM KDDBD01.KDTCTCT 在我第一次执行它时没有返回任何行,这完全合乎逻辑!因为在我的情况下,我只想在数据不存在时插入数据。我很困惑,我找不到这个查询的解决方案
    【解决方案2】:

    我找到了一个可以满足我要求的解决方案,但我不知道这是否是最好的方法!无论如何,我发布它是为了帮助面临同样问题的人,但如果有人有其他建议,欢迎:

    MERGE INTO KDDBD01.KDTCTCT AS CT USING (SELECT COUNT(ADR_MAIL_UTIL) FROM KDDBD01.KDTCTCT) ON (CT.ADR_MAIL_UTIL = :contactEmail) WHEN NOT MATCHED THEN INSERT (CT.ADR_MAIL_UTIL) VALUES (:contactEmail)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多