我正在重寫一個MS Access數據庫到SQL服務器的過程中,並發現了一個奇怪的問題,我希望有人可以幫助。MS 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和金額。但是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
在樣品我有一個重複的45678912當我跑我的INSERT一個賬號,我沒有得到任何錯誤和我從2011年8月1日獲得記錄。
爲什麼Access在違反桌面PK時不會拋出錯誤? Access中有沒有選擇一個記錄而只是跳過另一個記錄?
我完全被這個問題困住,所以任何幫助都會很棒。
在Access中執行SQL的唯一可靠方法是使用'.Execute strSQL,dbFailOnError'。 DoCmd.OpenQuery和DoCmd.RunSQL都是應該避免的,因爲當您關閉SetWarnings時,您不知道哪些錯誤對您隱藏。我寫了一個函數,SQLRun(),作爲我多次發佈的DoCmd.RunSQL的替代品。它只是'.Execute,strSQL,dbFailOnError'的一個包裝,所以你不必每次都寫錯誤處理程序。在SO上搜索並嘗試一下。 –
感謝您指點我的功能。我會看看未來的用途。我目前的應用程序正在重寫,我不會對已經非常不穩定的應用程序進行任何代碼更改。 – Taryn
@ David-W-Fenton:「在Access中執行SQL的唯一可靠方法...」...使用DAO時。 – onedaywhen