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

我正在开发一个可以处理多个数据库服务器的应用程序,比如“mysql”。和“MS SQL server”。

我想获得表的名称使用一个通用的查询,应该适合于所有数据库类型的特定数据库。我尝试了以下几点:

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

但它是给表名的所有数据库的一个特定的服务器,但我想获得表名选择的数据库只。如何限制此查询以获取特定数据库的表?

1496989 次浏览

下面的查询将选择名为DBName的数据库中的所有Tables:

USE DBName
GO
SELECT *
FROM sys.Tables
GO

在这里偷窃:

USE YOURDBNAME
GO
SELECT *
FROM sys.Tables
GO

可能是因为不同的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

是oracle是:

select * from user_tables

也就是说,如果你只想让登录的user/schema拥有对象,否则你可以使用包含系统表的all_tablesdba_tables

只要把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;

我们可以不用GO代替,你可以使用分号;

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

在mysql中,使用:

SHOW TABLES;

选择DB后:

USE db_name

根据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 server上使用多个模式,那么选择TABLE_NAME而不同时选择TABLE_SCHEMA的好处可能有限,因此我假设我们在使用MS SQL server时对属于已知模式的表感兴趣。

我已经用SQL Server Management Studio和MySQL Workbench分别用我自己的SQL Server数据库和MySQL数据库测试了上面的查询,在这两种情况下,它都给出了表名。

该查询将Michael Baylon的两个不同查询合并为一个,然后可以在任意一种数据库类型上运行。WHERE子句的第一部分适用于MySQL数据库,第二部分(在OR之后)适用于MS SQL Server数据库。它很难看,逻辑上也有点不正确,因为它假定不存在与数据库同名的不需要的模式。这可能会帮助那些正在寻找可以在任一数据库服务器上运行的单个查询的人。

对于Mysql,你可以做的很简单。显示表;

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

SELECT name FROM databaseName.sys.Tables;

更新MSSQL服务器的最新版本(17.7)

SELECT name FROM sys.Tables WHERE type_desc = 'USER_TABLE'

SELECT *获取所有列。

选择下面的数据库查询:

use DatabaseName

现在

SELECT * FROM INFORMATION_SCHEMA.TABLES

现在您可以在控制台中看到下面创建的表。

PFA。

Query

在我们的Oracle DB (PL/SQL)下面的代码工作,以获得我们的DB中所有存在的表的列表。

select * from tab;

而且

select table_name from tabs;

两者都在工作。让我们试着找到你的。

简单地得到所有的重要信息与下面的SQL在Mysql

    SELECT t.TABLE_NAME , t.ENGINE , t.TABLE_ROWS ,t.AVG_ROW_LENGTH,
t.INDEX_LENGTH FROM
INFORMATION_SCHEMA.TABLES as t where t.TABLE_SCHEMA = 'YOURTABLENAMEHERE'
order by t.TABLE_NAME ASC limit 10000;

如果有人想列出特定数据库中的所有表而不使用&;use&;关键字:

SELECT TABLE_NAME FROM databasename.INFORMATION_SCHEMA.TABLES

这很好

< p >选择 * 从 information_schema.tables; < / p >

对于postgres,它将是:

SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema  = 'your_schema' -- probably public
SELECT TABLE_NAME
FROM your_database_name.INFORMATION_SCHEMA.TABLES
ORDER BY TABLE_NAME;
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
ORDER BY TABLE_NAME