2011-03-15 46 views
3

我们有一个SQL脚本用于在多种类型的数据库上执行。是否有可能获得执行SQL脚本的当前数据库的类型?如何查找当前数据库类型

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

回答

4

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

+0

谢谢@zerkms for answer – Gaurav 2011-03-15 08:15:36

1

不,不在SQL语句中。

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

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

0

尽管ANSI SQL中没有关于确定数据库供应商的信息,但您可以尝试猜测并检查。如果您有预定的供应商列表供您选择,则此问题要容易得多。我最近遇到了这个问题,我只有一个到数据库的SQL连接。我知道数据库文件的文件扩展名,所以这使得它成为供应商的一个限制列表。我运行了各种SQL语句来列出表名,直到有人工作。据我所见,获取表名的列表对于每个数据库供应商都是不同的。

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

0
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) 

我不能告诉,如果这些项目的presense是强制性的information_schema。我想是的。

matrix of information schema support