2009-12-03 32 views
1

我想知道是否有編寫在SQL Server,mySQL和PostgreSQL中兼容的SQL代碼的指南。我正在編寫一個程序,用戶可以選擇後端數據庫。我很難爲每個數據庫創建單獨的查詢。我不想使用ORM或類似的東西。在SQL Server,mySQL和PostgreSQL中可用的可移植SQL

謝謝你的時間。

+0

我擔心的是,如果不照顧單獨的平臺,您將失去很多優化收益(或優化機會!)。例如,MSSQL可以在存儲過程中執行比動態SQL更快的操作 - 但我不認爲MS存儲過程語法可移植到很多其他任何東西! – Kristen 2009-12-03 13:14:41

回答

3

那麼,你可以選擇的最佳路徑是採用SQL ISO標準。

Postgres和MySQL是大力支持者,但我不知道你是否可以說相同的SQL Server。

無論如何,我認爲ORM解決方案對您來說可能是最好的,因爲他們通常會很好地抽象出這些差異。

但是,如果你不想使用它,你總是可以將你的查詢存儲在不同的存儲庫中,每個存儲庫用於特定的數據庫並在運行時加載它們。

+0

只是爲他人澄清:SQL的ISO標準不是各種專有SQL中常見元素的「交集」。這是他們*應該*,而不是他們* *。沒有DBMS實現所有的ISO SQL,並且我見過的每個DBMS都至少有一些非ISO擴展。如果情況是所有SQL功能空間中的維恩圖,並且每個SQL方言/標準都是一個圓圈,則任何圓都不會完全適合其他圓圈。 – goodside 2011-05-25 19:42:00

1

遵循SQL:2003標準。

將代碼從一個系統移植到另一個系統時執行單元測試。

不要使用函數,不要查看它們在dbms中的實現方式以及它們作爲參數接受的內容。

需要注意的東西:一些SUBSTRING函數在一個系統中基於0,在另一個系統中基於1。 DATEDIFF的工作方式也不同。某些dbms對於日期時間數據類型有一些微秒。這就是說,編寫真正可移植的SQL是一個夢想......但真正實現可移植性真的很重要嗎?熟練的DBA應該知道這些小小的差異並快速移植SQL代碼。