2011-06-17 88 views
3

由於情況不完全在我的控制之下,因此我必須開發ACCESS查詢,這些查詢將存儲在Access 2000 MDB中,但可以在任何一種:訪問2000年,2002年,2003年,2007年,2010年。這些查詢將訪問(通過鏈接表)MS SQL Server數據庫或Access 2000.MDB文件。確保Access 2000 mdb上的SQL-92到Access 2010下的SQL Server

在過去,我們遇到了一些問題,我們追蹤到的查詢不是ANSI-92兼容的。我們通過在「工具」|「選項」對話框的表格/查詢選項卡中標記複選框來解決這個問題(在舊版本的Access 2007以下)。

我們在各種系統之間移動這些Access應用程序.MDB,現在我們通常不會有任何問題。

但是,我剛剛開發了一個適用於所有內部連接的查詢,但是當我將其中一個連接更改爲外部連接時,查詢失敗,Access 2010下出現「無效操作」錯誤。以爲我會檢查ANSI-92複選框是否仍然設置。我找不到它。

現在,我知道Access 2003和更高版本自動使用ANSI 92語法,但我想知道是否有任何方法來檢查這是這種情況(在特定情況下)這些查詢。我觀察到,當我們改變複選框時,我所有的「Like」查詢變成了「ALike」查詢...

所以問題歸結爲ANSI 92語法在這種情況下完全透明,而我的查詢失敗的原因是別的東西......

TIA, 保羅

+1

A2003及更高版本不自動使用ANSI 92語法。你認爲他們做什麼? – 2011-06-17 18:43:52

+0

微軟文檔(我認爲在知識庫文章)。 – PaoloFCantoni 2011-06-22 04:19:20

+0

是Access文檔還是ADO文檔?如果前者,我確定它沒有這麼說 - 我猜它是後者,因爲ADO確實總是使用ANSI 92語法。 – 2011-06-23 01:43:43

回答

1

在Access 2010,SQL Server的語法兼容性設置爲下:

文件>選項>對象設計>查詢設計。

您首先需要檢查是否設置了該選項,或者不確認查詢的行爲是否正常。

至於LIKE vs ALIKE,後者將以ANSI方式工作,使用%_模式匹配。
在SQL-89兼容模式(MS Access SQL子集)中,LIKE只能與*?模式一起使用,但如果將兼容性更改爲SQL-92,則需要用%_來重寫查詢。

這就是爲什麼ALIKE被引入的原因,它允許您編寫符合ANSI的模式,而不管您選擇的兼容級別如何(因此在SQL-92兼容模式下,兩者表現相同)。

0

真的沒有理由在Access前端設置ANSI 92 SQL模式ON,除非你是一個懶惰的SQL Server程序員,他想要忘記他正在使用Access而不是SQL Server編寫SQL。

您不希望這樣做的原因是因爲它改變了Access應用程序中的內容,而實際上並沒有做任何事情來增強與SQL Server後端的交互。也就是說,如果您在Access前端的SQL中使用SQL 89通配符,則ODBC驅動程序在將SQL發送到服務器時負責轉換爲SQL 92通配符。唯一的例外是傳遞查詢,但是這些查詢都是用你服務器的原生SQL編寫的。

+5

想要以SQL Server兼容語法編寫查詢有很好的理由:如果需要,它可以更輕鬆地將查詢移動到SQL Server,如果您決定從Access遷移出去,則可以更輕鬆地在其他系統中重用它允許一個團隊在整個組織中維護一組兼容的查詢,而不是具有特定於Access的SQL和SQL Server的查詢。您提出了一個很好的觀點,即兼容性模式對Access本身沒有太大的幫助,但是您不能認爲人們的選擇純粹是基於懶惰。這是無償的。 – 2011-06-17 23:10:20