我正在工作的应用程序,可以处理多个数据库服务器,如“MySQL”和“MS SQL Server”。

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

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

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


当前回答

从这里偷来:

USE YOURDBNAME
GO 
SELECT *
FROM sys.Tables
GO

其他回答

根据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

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

对于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;