【发布时间】:2016-06-13 22:31:18
【问题描述】:
如何以通用的方式检查表是否存在于 Oracle、Teradata、SQL Server、DB2 等数据库中。
选项 1:
Select 1 from Table;
选项2:
Describe Table;
哪个更好,或者还有其他更好的方法吗?
编辑:不是所有这些数据库都支持select 1 from Table 以及检查存在的通用方法吗?
【问题讨论】:
-
您听说过术语系统目录或数据字典吗?即使您在查询可能存在的表时遇到错误,但您无法访问。
-
Describe当然不是 SQL Server 的有效选项 .... -
Describe 是 Oracle 中的一个客户端命令,因此它可以在 SQL*Plus 或 SQL Developer 以及其他人中工作,但不能通过 JDBC;即使在这些客户端中,您也需要解析客户端输出以查看它是否存在。
-
鉴于您命名的数据库,据我所知,没有通用方法可以使用 SQL 查询来完成您尝试执行的操作。所有这些数据库都没有实现 ANSI 标准
INFORMATION_SCHEMA(Oracle 是一个值得注意的非实现者;可能还有其他数据库)。各种与供应商无关的数据库访问方法,例如 ODBC(和 JDBC?)实现了查询元数据的方法,但并非所有驱动程序都实现了这些方法。 -
如果您使用 Java/JDBC,您可以使用
DatabaseMetaData.getTables()- 然后驱动程序将负责生成正确的查询
标签: sql-server oracle db2 teradata rdbms