【发布时间】:2011-07-15 14:04:46
【问题描述】:
我们有一个用于在多种类型的数据库上执行的 SQL 脚本。是否可以获取当前正在执行 SQL 脚本的数据库类型?
注意:我们不能使用非标准 SQL,即TSQL 等
【问题讨论】:
标签: sql
我们有一个用于在多种类型的数据库上执行的 SQL 脚本。是否可以获取当前正在执行 SQL 脚本的数据库类型?
注意:我们不能使用非标准 SQL,即TSQL 等
【问题讨论】:
标签: sql
不,ANSI SQL 中没有关于确定数据库供应商的内容。
【讨论】:
不,不在 SQL 语句中。
如果您碰巧使用 JDBC,您应该能够从 java.sql.DatabaseMetaData 中提取足够的信息。看看getDatabaseProductName。
我假设其他平台也可以使用类似的功能。
【讨论】:
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 中是强制性的。我想是的。
【讨论】:
虽然 ANSI SQL 中没有关于确定数据库供应商的内容,但您可以尝试猜测和检查。如果您有一个预先确定的供应商列表可供选择,这个问题就容易多了。我最近遇到了这个问题,我只有一个与数据库的 SQL 连接。我确实知道数据库文件的文件扩展名,因此使其成为受限制的供应商列表。我运行了各种 SQL 语句来列出表名,直到其中一个起作用。据我所知,每个数据库供应商获取表名列表是不同的。
如果您所做的只是运行 SQL 脚本,则此方法确实需要人工交互。现在,如果只有在 ANSI SQL 中处理错误或 try-catch 的标准方法...
【讨论】: