2017-10-20 61 views
0

我們想將我們的數據導出到未知的sql數據庫。它可以是mysql,mssql,postgresql。甚至簡單的事情都會產生問題。例如,在MySQL中,標識符的雙引號僅在ANSI_QUOTES = true時起作用(默認爲false)。在QUOTED_IDENTIFIER = ON時,mssql中的雙引號僅適用。還有一些關於MySQL如何解釋符合sql規範的代碼的問題。例如,有時它會忽略明確指定的約束名稱並根據其規則設置名稱。 MS SQL也不支持名爲BLOB的數據類型。有沒有一種聰明的方式來執行sql兼容odbc導出?或者,我們必須以某種方式查詢數據庫名稱和配置連接,使其與SQL兼容?如何通過ODBC以ansi sql兼容的方式創建表?

回答

0

的SQLGetInfo可以用來查詢SQL_IDENTIFIER_QUOTE_CHAR,它在我的配置返回「的SQL Server(在另一所指出的安德烈Belykh簡短的回答)。

我用的SQLGetInfo與SQL_DBMS_NAME參數來獲取數據庫管理系統的名字。在SQL Server的情況下,它會返回「的Microsoft SQL Server」,然後我可以申請SQL Server特定的代碼。 SQL服務器的存儲方式blob是通過filestream,但它有侷限性(必須使用Windows身份驗證才能訪問文件)。因此,如果不支持Blob(也可以通過SQLGetTypeInfo檢查),我使用varbinary(max),它受2 GB限制(這對我來說沒什麼問題,我忽略了更大的文件)。默認情況下,我不能使用varbinary,因爲在mysql中它被限制爲65KB。所以AFAIK自定義代碼需要支持不同的dbms。

0

專門爲引用標識符可以使用的SQLGetInfo並要求SQL_IDENTIFIER_QUOTE_CHAR

+0

感謝您指出該功能。 – pusheax

相關問題