【问题标题】:How to find current database type如何查找当前数据库类型
【发布时间】:2011-07-15 14:04:46
【问题描述】:

我们有一个用于在多种类型的数据库上执行的 SQL 脚本。是否可以获取当前正在执行 SQL 脚本的数据库类型?

注意:我们不能使用非标准 SQL,即TSQL 等

【问题讨论】:

    标签: sql


    【解决方案1】:

    不,ANSI SQL 中没有关于确定数据库供应商的内容。

    【讨论】:

      【解决方案2】:

      不,不在 SQL 语句中。

      如果您碰巧使用 JDBC,您应该能够从 java.sql.DatabaseMetaData 中提取足够的信息。看看getDatabaseProductName

      我假设其他平台也可以使用类似的功能。

      【讨论】:

        【解决方案3】:
        SELECT *
        FROM information_schema.sql_implementation_info
        WHERE implementation_info_name LIKE 'DBMS%'
            ;
        

        在这里工作:

         implementation_info_id | implementation_info_name | integer_value | character_value | comments 
        ------------------------+--------------------------+---------------+-----------------+----------
         17                     | DBMS NAME                |               | PostgreSQL      | 
         18                     | DBMS VERSION             |               | 09.01.0002      | 
        (2 rows)
        

        我无法判断这些项目的存在是否在 information_schema 中是强制性的。我想是的。

        matrix of information schema support

        【讨论】:

          【解决方案4】:

          虽然 ANSI SQL 中没有关于确定数据库供应商的内容,但您可以尝试猜测和检查。如果您有一个预先确定的供应商列表可供选择,这个问题就容易多了。我最近遇到了这个问题,我只有一个与数据库的 SQL 连接。我确实知道数据库文件的文件扩展名,因此使其成为受限制的供应商列表。我运行了各种 SQL 语句来列出表名,直到其中一个起作用。据我所知,每个数据库供应商获取表名列表是不同的。

          如果您所做的只是运行 SQL 脚本,则此方法确实需要人工交互。现在,如果只有在 ANSI SQL 中处理错误或 try-catch 的标准方法...

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-06-16
            • 2019-01-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-21
            相关资源
            最近更新 更多