2016-03-03 164 views
0

這裏有一個奇怪的位,但我們有幾個SQL Server視圖,它們是在Access 2010中打開的Access 2003(mdb)數據庫中的鏈接ODBC表,但我可以確認Access 2010(accdb)數據庫中存在同樣的問題。 SQL Server版本是2012.與SQL Server的連接是通過系統ODBC鏈接。訪問2010鏈接的ODBC表丟失列問題

在SQL Server的ViewA和ViewB定義中,我們有[Date_Last_Sunday],[Date_Next_Monday],[Date_Next_Sunday],[Date_2_Mondays_Future]和其他幾個。兩個視圖都有完全相同的日期列,但左側有不同的列。在SSMS中,兩個查詢都返回完全相同的日期列,而沒有問題。我也可以確認其中沒有重複的列名。

當我鏈接ViewA到訪問和打開它來檢查一切,我看到: enter image description here

當我鏈接ViewB到Access,做同樣的檢查,我看到: enter image description here

注意[Date_Next_Monday]列缺失,但是數據仍然存在,但列表錯誤!我不能提供比某種Jet錯誤更好的解釋,但這非常奇怪。這已經工作了很多年,今天剛剛被報告爲一個問題。

有沒有人見過這樣的事情?你能解決它嗎?

+0

如果刪除並重新創建指向視圖的ODBC鏈接表,該行爲是否會持續存在? –

+0

仔細檢查對象名稱和甚至版本。您可能指向另一個表/視圖或服務器上的另一個數據庫,並在Access中重命名。 – Parfait

+0

@GordThompson是的,它確實存在。我刪除並重新創建了ODBC鏈接本身,加上兩個表,重新鏈接它們,完全相同的行爲。 – ubercam

回答

1

不好意思打擾這個人的每一個人,現在我覺得有點愚蠢,我想到了!

該問題源於事實,即有第三個視圖返回ViewA和ViewB使用的日期(稱爲ViewDates)。在這兩個視圖中,我與ViewDates進行了交叉連接,並在SELECT列表中添加了ViewDates.*。在創建ViewB之後,ViewDates必須已被修改。

我做了一些更多的測試,並在運行SELECT * FROM ViewB後觀察了SSMS中SQL Server的奇怪行爲,但是當我將ViewB腳本化並選擇查詢來運行它時,結果具有正確的數據。在我發佈之前,我原本將它編寫出來並運行它,這讓我認爲問題出在Access上,實際上與SQL Server有關。

最終解決這個問題所需的只是將ViewB編寫成腳本並執行(重新編譯它)。

我仍然覺得很奇怪,即使列未被識別,數據仍然會存在!我想這就是當你在視圖之上建立視圖時發生的情況...

我想我必須記住這些是我寫過的第一個視圖,所以我可以原諒自己違反了我從那時起學到的所有優秀設計實踐。

+0

當SQL視圖發生更改並且數據未刷新時,有趣的事情發生在Access中。這總是第一個響應,類似於每個幫助臺人員告訴您重新啓動時的響應。它修復了絕大多數問題。 –