首页 文章

通过SQL查询获取特定数据库的所有表名?

提问于
浏览
243

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

我想使用适用于所有数据库类型的通用查询来获取特定数据库的表名 . 我试过以下:

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

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

14 回答

  • 6
    select * from sys.tables
    order by schema_id      --comments: order by 'schema_id' to get the 'tables' in 'object explorer order'
    go
    
  • 1

    被盗here

    USE YOURDBNAME
    GO 
    SELECT *
    FROM sys.Tables
    GO
    
  • 15

    对于Mysql,你可以做到很简单 . SHOW TABLES;

  • 70

    以下查询将选择名为 DBName 的数据库中的所有 Tables

    USE DBName
    GO 
    SELECT *
    FROM sys.Tables
    GO
    
  • 13
    USE dbName;
    
    SELECT TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES
    WHERE (TABLE_SCHEMA = 'dbName' OR TABLE_SCHEMA = 'schemaName')
    ORDER BY TABLE_NAME
    

    如果您在MS SQL服务器上使用多个模式,那么SELECT-ing TABLE_NAME而不同时选择TABLE_SCHEMA可能效果有限,因此我假设我们对使用MS SQL Server时属于已知模式的表感兴趣 .

    我已经使用SQL Server数据库测试了上面的查询,使用了我的SQL Server数据库和使用MySQL数据库的MySQL Workbench,在这两种情况下它都给出了表名 .

    该查询将Michael Baylon的两个不同查询组合成一个可以在任一数据库类型上运行的查询 . WHERE子句的第一部分适用于MySQL数据库,第二部分(在OR之后)适用于MS SQL Server数据库 . 它是丑陋的,逻辑上有点不正确,因为它假设没有不需要的模式与数据库同名 . 这可能有助于寻找可以在任一数据库服务器上运行的单个查询的人 .

  • 1

    可能是由于不同的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 .

  • 0

    我没有看到这个答案,但是这就是我的意思:

    SELECT name FROM databaseName.sys.Tables;
    
  • 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
    
  • 24

    在mysql中,使用:

    SHOW TABLES;
    

    选择数据库后:

    USE db_name
    
  • 1

    UPDATE FOR THE LATEST VERSION OF MSSQL SERVER (17.7)

    SELECT name FROM sys.Tables WHERE type_desc = 'USER_TABLE'
    

    SELECT * 获取所有列 .

  • 0

    是的oracle是:

    select * from user_tables
    

    也就是说,如果您只想要登录 user/schema 所拥有的对象,否则您可以使用包含系统表的 all_tablesdba_tables .

  • 7
    USE DBName;
    SELECT * FROM sys.Tables;
    

    我们可以在没有 GO 的情况下处理你可以使用分号 ; .

  • 4

    只需将 DATABASE NAME 放在 INFORMATION_SCHEMA.TABLES 前面:

    select table_name from YOUR_DATABASE.INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE'
    
  • 384
    Exec sp_MSforeachtable 'Select ''?'''
    

相关问题