【发布时间】:2011-08-18 23:13:50
【问题描述】:
我正在将 MS Access 数据库重写到 SQL 服务器,并在 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 中是否有一些怪癖来选择一条记录并跳过另一条记录?
我完全被这个问题难住了,所以任何帮助都会很棒。
【问题讨论】:
标签: sql ms-access primary-key