通过SQL查询获取特定数据库的所有表名称?

我正在处理可以处理多个数据库服务器(如“MySQL”和“MS SQL Server”)的应用程序。

我想要使​​用适用于所有数据库types的通用查询来获取特定数据库的表名。 我试过以下:

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' 

但它是提供特定服务器的所有数据库的表名,但我只想获取选定数据库的表名称。 我怎样才能限制这个查询获取特定数据库的表?

可能是由于不同的sql dbms处理模式的方式。

尝试以下

对于SQL Server:

 SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG='dbName' 

对于MySQL:

 SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='dbName' 

对于Oracle,我认为相当于使用DBA_TABLES

从这里偷来的 :

 USE YOURDBNAME GO SELECT * FROM sys.Tables GO 

以下查询将select名为DBName的数据库中的所有Tables

 USE DBName GO SELECT * FROM sys.Tables GO 

只需将DATABASE NAME置于INFORMATION_SCHEMA.TABLES

 select table_name from YOUR_DATABASE.INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE' 
 USE DBName; SELECT * FROM sys.Tables; 

我们可以处理没有就地的你可以使用分号;

在MySQL中,使用:

 SHOW TABLES; 

selectDB后:

 USE db_name 

对于Mysql,你可以做到简单。 SHOW TABLES;

我没有看到这个答案,但嘿这就是我所做的:

 SELECT name FROM databaseName.sys.Tables; 
 Exec sp_MSforeachtable 'Select ''?''' 
 select * from sys.tables order by schema_id --comments: order by 'schema_id' to get the 'tables' in 'object explorer order' go 

是的,oracle是:

 select * from user_tables 

也就是说,如果只需要login的user/schema拥有的对象,则可以使用包含系统表的all_tablesdba_tables

从Michael Baylon的回答中,我需要一个包含模式信息的列表,这就是我如何修改他的查询。

 SELECT TABLE_SCHEMA + '.' + TABLE_NAME as 'Schema.Table' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG = 'dbName' ORDER BY TABLE_SCHEMA, TABLE_NAME 
 USE dbName; SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE (TABLE_SCHEMA = 'dbName' OR TABLE_SCHEMA = 'schemaName') ORDER BY TABLE_NAME 

如果您正在MS SQL服务器上使用多个模式,那么SELECT-ing TABLE_NAME不会同时selectTABLE_SCHEMA可能是有限的,所以我假设我们在使用MS SQL Server时对属于已知模式的表感兴趣。

我已经用SQL Server Management Studio使用我的SQL Server数据库和使用MySQL数据库的MySQL Workbenchtesting了上面的查询,并且在这两种情况下都给出了表名。

查询将Michael Baylon的两个不同的查询合并为一个可以在任一数据库types上运行的查询。 WHERE子句的第一部分在MySQL数据库上工作,第二部分(在OR之后)在MS SQL Server数据库上工作。 这是丑陋的,逻辑上有点不正确,因为它假定没有与数据库同名的不想要的模式。 这可能有助于正在查找可以在任一数据库服务器上运行的单个查询的人员。