gpt4 book ai didi

sql - MS Access 是否禁止插入主键违规?

转载 作者:行者123 更新时间:2023-12-04 17:39:42 25 4
gpt4 key购买 nike

我正在将 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 中是否有一些怪癖可以选择一条记录并跳过另一条记录?

我完全被这个问题难住了,所以任何帮助都会很棒。

最佳答案

你如何运行查询?如果您使用的是 DoCmd.RunSQL ,切换到使用 .Execute DAO 数据库对象的方法,并使用 dbFailOnError .

Dim db As DAO.Database
Dim strInsert As String
strInsert = "your insert statement"
Set db = CurrentDb
db.Execute strInsert, dbFailOnError
Set db = Nothing

编辑 : 如果 Main 是到 SQL Server 表的 ODBC 链接,我会检查 Errors Collection (DAO)之后 db.Execute strInsert, dbFailOnError

关于sql - MS Access 是否禁止插入主键违规?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7115247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com