[英]Get all table names of a particular database by SQL query?
我正在开发可以处理多个数据库服务器的应用程序,例如“MySQL”和“MS SQL Server”。
我想使用适用于所有数据库类型的通用查询来获取特定数据库的表名。 我试过以下:
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
以下查询将选择名为DBName
的数据库中的所有Tables
:
USE DBName
GO
SELECT *
FROM sys.Tables
GO
USE DBName;
SELECT * FROM sys.Tables;
我们可以在没有GO
情况下进行处理,而您可以使用分号;
.
只需将DATABASE NAME
放在INFORMATION_SCHEMA.TABLES
前面:
select table_name from YOUR_DATABASE.INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE'
在 mysql 中,使用:
SHOW TABLES;
选择数据库后:
USE db_name
我没有看到这个答案,但嘿,这就是我所做的:
SELECT name FROM databaseName.sys.Tables;
如果有人想在不使用“use”关键字的情况下列出特定数据库中的所有表:
SELECT TABLE_NAME FROM databasename.INFORMATION_SCHEMA.TABLES
SELECT * FROM information_schema.tables;
对于Mysql,你可以做的很简单。 显示表;
select * from sys.tables
order by schema_id --comments: order by 'schema_id' to get the 'tables' in 'object explorer order'
go
Exec sp_MSforeachtable 'Select ''?'''
USE dbName;
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE (TABLE_SCHEMA = 'dbName' OR TABLE_SCHEMA = 'schemaName')
ORDER BY TABLE_NAME
如果您在 MS SQL 服务器上使用多个模式,那么在不同时选择 TABLE_SCHEMA 的情况下选择 TABLE_NAME 的好处可能有限,因此我假设我们在使用 MS SQL Server 时对属于已知模式的表感兴趣。
我已经使用 SQL Server Management Studio 使用我的 SQL Server 数据库和使用 MySQL 数据库的 MySQL Workbench 测试了上面的查询,在这两种情况下,它都给出了表名。
该查询将 Michael Baylon 的两个不同查询合并为一个,然后可以在任一数据库类型上运行。 WHERE 子句的第一部分适用于 MySQL 数据库,第二部分(在 OR 之后)适用于 MS SQL Server 数据库。 它是丑陋的并且在逻辑上有点不正确,因为它假设没有与数据库同名的不需要的模式。 这可能对正在寻找可以在任一数据库服务器上运行的单个查询的人有所帮助。
更新最新版本的 MSSQL SERVER (17.7)
SELECT name FROM sys.Tables WHERE type_desc = 'USER_TABLE'
或SELECT *
获取所有列。
在我们的 Oracle DB (PL/SQL) 中,下面的代码用于获取我们数据库中所有现有表的列表。
select * from tab;
和
select table_name from tabs;
两者都在工作。 让我们试着找到你的。
是的 oracle 是:
select * from user_tables
也就是说,如果您只想要登录user/schema
拥有的对象,否则您可以使用包含系统表的all_tables
或dba_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
只需在 Mysql 中使用以下 SQL 获取所有 improtanat 信息
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;
对于 postgres,它将是:
SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'your_schema' -- probably public
显示表格列表
SHOW TABLES FROM DBNAME
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.