我正在处理可以处理多个数据库服务器的应用程序,例如“MySQL”和“MS SQL Server”。
我想使用适用于所有数据库类型的通用查询来获取特定数据库的表名。我试过以下:
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
但是它给出了特定服务器的所有数据库的表名,但我想只获取所选数据库的表名。如何限制此查询以获取特定数据库的表?
答案 0 :(得分:419)
可能是因为不同的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
。
答案 1 :(得分:75)
从here被盗:
USE YOURDBNAME
GO
SELECT *
FROM sys.Tables
GO
答案 2 :(得分:26)
以下查询将选择名为Tables
的数据库中的所有DBName
:
USE DBName
GO
SELECT *
FROM sys.Tables
GO
答案 3 :(得分:16)
USE DBName;
SELECT * FROM sys.Tables;
我们可以在没有GO
的情况下进行交易,您可以使用分号;
。
答案 4 :(得分:13)
只需将DATABASE NAME
放在INFORMATION_SCHEMA.TABLES
前面:
select table_name from YOUR_DATABASE.INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE'
答案 5 :(得分:9)
在mysql中,使用:
SHOW TABLES;
选择数据库后:
USE db_name
答案 6 :(得分:6)
我没有看到这个答案,但嘿,这就是我的所作所为:
SELECT name FROM databaseName.sys.Tables;
答案 7 :(得分:3)
对于Mysql,你可以做到很简单。 SHOW TABLES;
答案 8 :(得分:2)
select * from sys.tables
order by schema_id --comments: order by 'schema_id' to get the 'tables' in 'object explorer order'
go
答案 9 :(得分:1)
选择 * 从 information_schema.tables;
答案 10 :(得分:1)
如果有人想在不使用“ use”关键字的情况下列出特定数据库中的所有表,则:
SELECT TABLE_NAME FROM databasename.INFORMATION_SCHEMA.TABLES
答案 11 :(得分:1)
MSSQL SERVER的最新版本(17.7)的更新
SELECT name FROM sys.Tables WHERE type_desc = 'USER_TABLE'
或使用SELECT *
获取所有列。
答案 12 :(得分:1)
Exec sp_MSforeachtable 'Select ''?'''
答案 13 :(得分:0)
USE dbName;
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE (TABLE_SCHEMA = 'dbName' OR TABLE_SCHEMA = 'schemaName')
ORDER BY TABLE_NAME
如果您正在使用MS SQL服务器上的多个架构,那么选择TABLE_NAME而不同时选择TABLE_SCHEMA可能效果有限,因此我假设我们对使用MS时属于已知架构的表感兴趣SQL Server。
我使用SQL Server数据库和我的MySQL Workbench使用MySQL数据库测试了SQL Server Management Studio上面的查询,在这两种情况下它都给出了表名。
查询将Michael Baylon的两个不同查询合并为一个可以在任一数据库类型上运行的查询。 WHERE子句的第一部分适用于MySQL数据库,第二部分(在OR之后)适用于MS SQL Server数据库。它是丑陋的,逻辑上有点不正确,因为它假设没有不需要的模式与数据库同名。这可能有助于寻找可在任一数据库服务器上运行的单个查询的人。
答案 14 :(得分:0)
根据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
答案 15 :(得分:0)
答案 16 :(得分:0)
在下面的Oracle数据库(PL / SQL)代码中,该代码用于获取数据库中所有现有表的列表。
select * from tab;
和
select table_name from tabs;
两者都在工作。让我们试着找到你的。
答案 17 :(得分:0)
在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;
答案 18 :(得分:0)
是的oracle是:
select * from user_tables
即如果您只想要登录的对象user/schema
,否则您可以使用包含系统表的all_tables
或dba_tables
。