Answers:
可能由于不同的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 dbName GO
对于SQL Server。如果您不使用数据库,即使该数据库中有表,也不会显示结果。
USE dbName GO
在Server 2014上添加前缀
从这里被盗:
USE YOURDBNAME
GO
SELECT *
FROM sys.Tables
GO
以下查询将选择Tables
数据库中所有名为的DBName
:
USE DBName
GO
SELECT *
FROM sys.Tables
GO
USE DBName;
SELECT * FROM sys.Tables;
我们可以GO
在没有就位的情况下处理您可以使用分号的情况;
。
我没有看到这个答案,但是嘿,这就是我要做的:
SELECT name FROM databaseName.sys.Tables;
对于Mysql,您可以做的简单。 显示表;
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 Server上使用多个架构,则在不同时选择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是:
select * from user_tables
也就是说,如果您只希望登录的对象拥有,user/schema
否则可以使用all_tables
或dba_tables
包含系统表。
只需在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;