2012-04-18 86 views
2

我有一個應用程序使用幾個不同的數據庫來收集類似的信息。我通過一個ODBC接口來實現這個功能,它有效地從我的應用程序層中抽象出我的持久層,並且它工作得很好。ODBC公共語言參考?

事情是這樣的:我想比一個更具體一點查詢

SELECT * FROM [TableName] 

據我所知,這適用於所有ODBC數據庫,但是當你開始變得更具體一點,語法和語言的使用變得更加成問題。在MySQL中工作的查詢不一定在MSSQL中工作;對Oracle運行良好的查詢不會很好地抵抗PostgreSQL。

但是ODBC是一個抽象層,所以我認爲必須有一個所有符合ODBC的數據庫系統支持的語言參考。如果我使用這些語言結構編寫我的查詢,我應該期望得到類似的結果,無論數據庫系統如何。

我對不對?有這樣的標準嗎?如果是這樣,我在哪裏可以找到語言參考,以便我可以相應地編寫我的查詢?事情我很感興趣,特別是同樣的結構:

  • TOP(LIMIT)
  • MID(SUBSTR)
  • CAST(CONVERT)

等感謝您的幫助!

+0

我們有同樣的情況,從來沒有發現任何可行的。最近我已經能夠進來只是做基本的查詢轉儲,然後讓應用程序做這個很不理想的繁重工作。一種替代方法是將查詢放在單獨的XML文件中,然後是一組連接類。然後可以調用查詢和連接,如果必須對查詢進行更改,則可以在xml文件中進行更改,而無需重新編譯。 – Brian 2012-04-18 13:06:27

+0

這使我很傷心:(. – 2012-04-18 13:17:27

+0

是LINQ到SQL /實體的一個選項嗎?這是一個類似的問題,由LINQ解決:http://stackoverflow.com/questions/2938252/generic-sql-buildernet – mellamokb 2012-04-18 14:03:12

回答

1

對於函數,ODBC標準在Appendix E: Scalar Functions處列出。這包括子字符串。您需要使用語法{fn func_name(arguments)}。 SQL 92中的強制轉換函數是在ODBC中轉換的(例如,SQL92中的CAST(值AS類型)是ODBC中的{fn CONVERT(value,type)})。但是,Top不是一個函數,而是數據庫可能支持或可能不支持的SQL語法的一部分(例如,Oracle沒有頂級的)。

+0

這確實看起來是正確的答案,儘管它很煩人。 – 2012-04-19 15:21:11