【问题标题】:Handling duplicate primary keys when appending追加时处理重复的主键
【发布时间】:2014-10-20 05:21:28
【问题描述】:

一旦数据经过审核,我想每周从测试数据库导出到生产数据库。

我一直在使用以下操作查询:

Sub testCopyFromTestDB()

Dim digitalDisplaySQL As String
Dim SEMSQL As String

SEMSQL = "INSERT INTO [tblSEMMetricsAdGroups] IN 'C:\DestinationDatabase.accdb'" & _
"SELECT [TESTtblSEMMetricsAdGroups].*" & _
"FROM [TESTtblSEMMetricsAdGroups]" & _
"WHERE [TESTtblSEMMetricsAdGroups].[startDate]=#08/19/2014#;"

DoCmd.RunSQL SEMSQL   


End Sub

但是,由于主键重复,最近我的所有记录都没有追加。这两个字段的主键都是自动编号的。我知道问题是我正在努力解决的重复键是解决此错误的明智解决方案。

需要注意的是,这些记录没有其他可以作为主键的字段。

有什么建议吗?

提前致谢, 克里斯

【问题讨论】:

  • 明确列出列并省略主键。
  • PK 匹配时你想做什么?您是要保留现有行(如果是,您要插入 另一个 行)还是更新它?

标签: sql vba ms-access database-design primary-key


【解决方案1】:

如果您有自动编号的主键,则通常不应提供值。这就是自动编号的全部意义所在。如果主键的值有独立的意义,比如表 A 的主键值应该和表 B 的主键值相同,那么不要使用自动编号,因为它不会工作。不要试图用锤子装螺丝,也不要试图用螺丝刀装钉子。 :-)

【讨论】:

    【解决方案2】:

    主键的整个概念是为您的记录提供一个字段,使该记录绝对、绝对唯一。如果自动编号字段不能这样做,则自动编号字段不是正确的主键。这是切中要害,无可争辩。

    您需要将主键更改为唯一且不可复制的内容。展望未来,您应该将主键设置为自动编号字段的组合,并与输入日期字段的数值连接(假设您有一个或类似的)。

    或者,您可以只导入所有主键,除非您有其他以某种方式相关的表并且需要将它们链接在一起的键。

    【讨论】:

    • 这是我实施的解决方案。我在两个表中创建了一个复合键,该键由自动编号字段、日期字段和表中的一个附加整数字段组成。感谢您的帮助。
    猜你喜欢
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 2012-05-06
    • 1970-01-01
    相关资源
    最近更新 更多