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

前端之家收集整理的这篇文章主要介绍了SQL – MS Access是否抑制插入的主键冲突?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在重新编写MS Access数据库sql服务器,并在Access中发现了一个奇怪的问题,我希望有人可以提供帮助.

我有一个表,让我们称之为’Main’,并在索引的帐户上使用主键,并且不允许重复.看起来很简单但我的问题是在数据被插入时发生的.

我的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日获得了记录.

为什么Access违反表中的PK时不会抛出错误?在Access中有一些怪癖选择一条记录而只是跳过另一条记录吗?

我完全被这个问题困扰所以任何帮助都会很棒.

解决方法

你是如何运行查询的?如果您正在使用DoCmd.Runsql,请切换到使用DAO数据库对象的.Execute方法,并使用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链接,我会在db.Execute strInsert,dbFailOnError之后检查Errors Collection (DAO)

原文链接:https://www.f2er.com/mssql/83944.html

猜你在找的MsSQL相关文章