当前位置: 首页 > 面试题库 >

MS Access是否抑制插入上的主键冲突?

归和惬
2023-03-14
问题内容

我正在将MS Access数据库重新写入SQL Server的过程中,并且在Access中发现了一个奇怪的问题,希望有人可以提供帮助。

我有一个表,我们称它为“主”,带有索引的帐户上的主键,不允许重复。看起来很简单,但是在插入数据时出现了我的问题。

我的INSERT查询是(为了简洁起见,字段数受到限制)

INSERT INTO Main (Account, SentDate, Amount)
SELECT C.Account, C.SentDate, C.Amount
FROM 
    (CALLS C LEFT JOIN Bals B ON C.Account = B.ACCT_ID) 
LEFT JOIN AggAnt A ON C.Account = A.Account

问题是这样的,如果我运行SELECT查询的一部分,我会得到2365条记录,但是当我运行查询时,INSERT我会得到2364条记录。因此,我进行了一些检查,发现一个帐户重复,记录之间的区别是SentDate和Amount。但是Access只插入一条记录,而不抛出任何类型的错误消息或任何东西。查询中没有任何内容表明选择最近的日期,依此类推。

样本数据:

Account    SentDate   Amount
12345678   8/1/2011   123.00
23456789   8/1/2011   45678.00
34567890   8/1/2011   7850.00
45678912   8/1/2011   635.00
45678912   5/1/2011   982.00
56789123   8/1/2011   2639.00

在示例中,我有一个在运行INSERT时重复的45678912的帐户,没有错误,并且获得了2011年8月1日的记录。

当这违反了表上的PK时,为什么Access不会抛出错误?在Access中是否有一些怪癖选择一个记录而仅跳过另一个记录?

这个问题让我感到很沮丧,因此任何帮助都将是很大的。


问题答案:

在HansUp将我指向检查SetWarnings =
false的方向之后。我发现它埋在我的代码中,这就是为什么没有关于由于主键冲突而导致未插入记录的警告消息的原因。

请注意,要确保您希望抑制这些消息。



 类似资料:
  • 在使用Postgresql的Rails4.2中,我在尝试保存新的ActiveRecord对象时遇到了这个错误 PG::UniqueViolation:错误:重复键值违反唯一约束“My_table_name_pkey” 它看起来像是试图用已经存在的主键将记录插入到表中。我该怎么解决这个问题?

  • 问题内容: 是否有一种跨数据库平台的方法来获取刚刚插入的记录的主键? 我注意到,这个答案表明您可以通过调用来获得它,而且我认为您可以调用jdbc中的数据库来实现此目的吗? 如果不是,您如何建议我为可以访问SQL Server,MySQL和Oracle中的任何代码的代码实现此功能? 问题答案: 从我的代码复制: 其中pInsertOid是准备好的语句。 然后您可以获取密钥: 希望这为您提供一个良好的

  • 每当我的应用程序启动时,我总是得到以下错误消息: 将data.sql更改为: 生成以下错误消息:

  • 假设我在我的一个表中执行MySQL操作,该表具有列,该列被设置为和。 如何获取查询以输出同一查询中新生成的主键的值? 目前,我正在运行第二个查询来检索id,但这似乎不是一个好的做法,因为这可能会产生错误的结果。 如果这是不可能的,那么什么是最佳实践,以确保我检索正确的ID?

  • 问题内容: 请清除我对此的疑问,在SQL Server(2000及更高版本)中,主键是自动对群集索引的吗?还是我们可以选择在主键上使用非群集索引? 问题答案: 不,它可以是非集群的。但是,如果您没有明确将其定义为非聚集索引,并且表上没有聚集索引,则会将其创建为聚集索引。

  • 我有一个使用Spring Boot/hibernate的简单项目,在单元测试中插入新值时有bug。对于测试,我使用了一个带有虚拟数据(data.sql)的新数据库,在启动后,当插入测试运行时,我出现了一个错误“密钥冲突”: 我管理带有注释的ID:@ID@GeneratedValue(策略=GenerationType.Auto) @data@entity@table公共类地址{