如何通过ODBC以ansi sql兼容的方式创建表?

时间:2017-10-20 14:17:40

标签: sql odbc

我们想将数据导出到未知的sql数据库。它可能是mysql,mssql,postgresql。甚至简单的事情也会产生问题。例如,在MySQL中,标识符的双引号仅在ANSI_QUOTES = true时有效(默认为false)。 mssql中的双引号仅在QUOTED_IDENTIFIER = ON时有效。关于HOW MySQL如何解释符合sql的代码也存在一些问题。例如,有时它会忽略明确指定的约束名称并根据其规则设置名称。 MS SQL也不支持名为BLOB的数据类型。是否有一种聪明的方法来执行sql兼容的odbc导出?或者不知何故,我们必须以一种使sql兼容的方式查询数据库名称和配置连接?

2 个答案:

答案 0 :(得分:0)

特别是对于引用标识符,您可以使用SQLGetInfo并请求SQL_IDENTIFIER_QUOTE_CHAR

答案 1 :(得分:0)

SQLGetInfo 可用于查询 SQL_IDENTIFIER_QUOTE_CHAR ,并在我的配置中返回“for sql server”(正如Andrey Belykh在另一个简短回答中所指出的那样)。

我使用 SQLGetInfo SQL_DBMS_NAME 参数来获取dbms名称。在sql server的情况下,它返回“Microsoft SQL Server”。然后我可以应用sql server特定的代码。 SQL Server存储 blob 的方式是通过 filestream ,但它有局限性(必须使用Windows身份验证才能访问文件)。因此,如果不支持blob(也可以通过SQLGetTypeInfo检查),我使用 varbinary(max),它受2 GB的限制(对我来说没问题,我忽略了更大的文件)。我默认不能使用varbinary,因为在mysql中它限制为65KB。因此需要AFAIK自定义代码来支持不同的dbms。