我正在开发可以处理多个数据库服务器的应用程序,例如“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
。
从 here 窃取:
USE YOURDBNAME
GO
SELECT *
FROM sys.Tables
GO
以下查询将选择名为 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;
我们可以不用GO
来处理,你可以使用分号;
。
在 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;
要选择下面的数据库查询:
use DatabaseName
现在
SELECT * FROM INFORMATION_SCHEMA.TABLES
现在您可以在控制台中看到下面创建的表。
粉煤灰。
https://i.stack.imgur.com/Sp26S.png
对于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 ''?'''
sp_MSforeachtable
?
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 数据库使用 SQL Server Management Studio 和使用 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;
两者都在工作。让我们试着找到你的。
是的甲骨文是:
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 获取所有重要信息
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;
SELECT TABLE_NAME
FROM your_database_name.INFORMATION_SCHEMA.TABLES
ORDER BY TABLE_NAME;
对于 postgres,它将是:
SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'your_schema' -- probably public
不定期副业成功案例分享
USE dbName GO
用于 SQL 服务器。如果您不使用 DB,则不会显示结果,即使该 DB 中有表。USE dbName GO
前缀的情况下,SQL Server 条目对我来说很好。