有没有一条SQL命令可以列出数据库中的所有表,并且不依赖于特定的提供商(适用于MSSQLServer、Oracle、MySQL)?
最接近的选项是查询 INFORMATION_SCHEMA
表。
SELECT *
FROM INFORMATION_SCHEMA.Tables
WHERE table_schema = 'mydatabase';
INFORMATION_SCHEMA
是标准SQL的一部分,但并非所有厂商都支持它。据我所知,仅有以下关系型数据库管理系统提供了支持:
有些数据库品牌(例如Oracle、IBM DB2、Firebird和Derby等)拥有类似的“目录”视图,可提供一个接口,您可以查询系统上的元数据。但这些视图的名称、包含的列以及它们之间的关系与ANSI SQL标准中的INFORMATION_SCHEMA
不匹配。换句话说,类似的信息是可用的,但您需要使用不同的查询来获取这些信息。
(注:IBM DB2 UDB for System i中的目录视图与IBM DB2 UDB for Windows /* NIX中的目录视图不同,这就是UDB中“通用”的含义!)
其他一些品牌(例如SQLite)根本不提供任何可查询的元数据接口。
不,SQL标准并不限制表名的列出位置(如果有的话),因此您需要根据您所处理的SQL引擎执行不同的语句(通常是在特定命名的表上执行SELECT
语句)。
如果您可以接受非SQL方法,并且您有数据库的ODBC驱动程序并且它实现了SQLTables入口点,那么您可能会获得所需的信息!
pjjH
API的详细信息请参见: http://msdn.microsoft.com/en-us/library/ms711831.aspx