還是一 ACCESS 資料庫的怪問題,首先,來源資料庫是使用 Access,而我們通常會在程式裡頭以 SQL 的語法對資料庫進行查詢的動作,這一個專案先前的設計者不曉得是誰,居然會以 “GENERAL” 作為 Table 的名稱,而我得負責將這些資料轉到新的平台 (MS-SQL) 中,這下子碰到問題了,我所寫的轉換程式沒有辦法正常的以:

SELECT * FROM GENERAL

這段語法來查詢到資料。

先犛清這個問題,這個問題發生在使用 SQL 語法進行查詢時,Table 的名稱 “剛好” 是 SQL 的保留字,也就是說,如果你使用 “TOP 5 MYTABLE” 作為 Table Name,在 Access 裡是允許的,但是在寫程式時用了類似的查詢語法的話,Jet 4.x Engine 會先透過自己的 SQL 語法檢查程式,結果就導致了錯誤。因為它不管你是 SQL 還是 ACCESS,它用的是標準的 SQL 語法檢驗你的語法。

首先想到的是作 Table 的 Rename 動作,如果 Table 可以 Rename,就可以在程式處理前先作 Rename 的動作,然後再查詢就可以了,但是查了很多的 Rename 方法,無法在 .NET 上頭試成功,想想,可能是因為原來就是保留字了,所以就算使用 dt.TableName=”NewTableName” 的方式也無法使它生效。既然這樣,就得找找其它的方法了。

最後,最簡單的方法出現了,它是在 SQL 語法中避過這個問題,而不是改變 ACCESS Databases 的任何內容,其實只要使用:

SELECT * FROM [GENERAL]

這樣的語法,就可以直接查詢以保留字所建的 Table 中的資料了。
事情的解法往往有很多,只是看事的觀點不同 (我想很多人會跟我一開始一樣由 ACCESS DB 著手),換個方向想解法 (由 SQL 語法著手),也許可以得到最簡單的答案。

PS. 請所有作系統開法的朋友們注意保留字的問題呀…!! 這種問題真是太棘手啦~~~ 解了兩個小時… 咚!!

最後修改日期: 2004-06-09