2011-10-13 69 views
16

是否有任何SQL驗證程序可以檢查針對多個數據庫服務器的語法?是否有任何SQL驗證器可以檢查針對多個數據庫服務器的語法?

例如,我可能想要檢查一個特定的查詢是否可以針對Oracle,MySQL和SQL Server。

我比被查詢的實際模式更關心SQL語法,所以一個能夠捕獲主要語法錯誤的工具,比如檢測到limit子句在SQL Server和Oracle中不被支持就足夠了。


編輯:

幾個答案都建議檢查語法特定的DBMS或ANSI標準。

我在尋找一種可能性,即針對兩種或多種數據庫(比如SQL Server和Oracle)之間的功能聯合。我希望能夠使用我在特定應用程序中針對的所有DBMS支持的任何SQL功能。

我不知道它是否值得。我認爲這取決於幾個數據庫共享的非ANSI功能的數量。如果數量很少,那麼以ANSI標準爲目標可能會更好。

+0

也許SQLite的外殼可能會有幫助。但是,LEFT和FULL聯接沒有實現,並且與Oracle不同,您可以從無選擇,而在Oracle中您必須使用DUAL。 – Benoit

+0

你寫了多少個數據庫?或者,這是否嘗試編寫一些數據庫不可知的中間件?也許可以嘗試dbms_sql.parse for Oracle,其他dbms類似(?)。 – tbone

+0

它也驗證每個數據庫的哪個版本。 –

回答

7

我不知道的任何是具體,這些都將檢查語句是ANSI 92/99/2003有效...

http://developer.mimer.com/validator/index.htm

,將讓你的99%途中有(特別是如果只是做CRUD操作)

也許如果你知道哪些保留字使用的數據庫,你可以滾你自己簡單檢查.. 見:How to find if a column name is a reserved keyword across various databases

(如前所述)如果您的目標是創建數據庫不可知系統,請考慮使用第三方工具,例如:實體空間

+1

我在一個簡單的語法錯誤上丟失了一堆時間,我沒有在存儲過程的聲明中關閉圓括號(圓括號)。此鏈接幫助我... [http://developer.mimer.com/validator/parser200x/](http://developer.mimer.com/validator/parser200x/) – Matija

相關問題