Как получить список всех таблиц в базе данных с помощью TSQL?

Каков наилучший способ получить имена всех таблиц в конкретной базе данных на SQL Server?

вопрос задан 6.10.2008
Ray Vega
76069 репутация

17 ответов


  • 1194 рейтинг

    SQL Server 2005, 2008, 2012, 2014 или 2016:

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

    Отображать только таблицы из определенной базы данных

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

    Или же,

     SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG='dbName' --(for MySql, use: TABLE_SCHEMA='dbName' )
     

    PS: для SQL Server 2000:

     SELECT * FROM sysobjects WHERE xtype='U' 
     
    ответ дан ScottStonehouse, с репутацией 18231, 6.10.2008
  • 180 рейтинг
     SELECT sobjects.name
    FROM sysobjects sobjects
    WHERE sobjects.xtype = 'U'
     

    Ниже приведен список других типов объектов, которые вы можете искать:

    • AF: функция агрегации (CLR)
    • C: ограничение CHECK
    • D: ограничение по умолчанию или по умолчанию
    • F: ограничение FOREIGN KEY
    • L: Журнал
    • FN: Скалярная функция
    • FS: Склассическая (CLR) скалярная функция
    • FT: сборка (CLR) табличная функция
    • IF: встроенная табличная функция
    • IT: Внутренняя таблица
    • P: Сохраненная процедура
    • PC: сборка (CLR) хранимая процедура
    • PK: ограничение PRIMARY KEY (тип K)
    • RF: хранимая процедура фильтра репликации
    • S: Системная таблица
    • SN: Синоним
    • SQ: очередь обслуживания
    • TA: Сборка (CLR) DML-триггер
    • TF: функция таблицы
    • TR: SQL DML Trigger
    • TT: Тип таблицы
    • U: Таблица пользователей
    • UQ: ограничение UNIQUE (тип K)
    • V: Просмотр
    • X: расширенная хранимая процедура
    ответ дан Micah, с репутацией 54038, 6.10.2008
  • 67 рейтинг
     SELECT * FROM INFORMATION_SCHEMA.TABLES 
     

    или

     SELECT * FROM Sys.Tables
     
    ответ дан StingyJack, с репутацией 15253, 6.10.2008
  • 27 рейтинг
     select * from sys.tables;
     

    ИЛИ ЖЕ

     SELECT * FROM INFORMATION_SCHEMA.TABLES 
     

    ИЛИ ЖЕ

     SELECT * FROM sysobjects WHERE xtype='U'
     
    ответ дан sunilkuamr, с репутацией 271, 3.05.2012
  • 19 рейтинг
    USE YourDBName
    GO 
    SELECT *
    FROM sys.Tables
    GO
    
    ответ дан Vikash Singh, с репутацией 589, 3.10.2013
  • 9 рейтинг
    exec sp_msforeachtable 'print ''?'''
    
    ответ дан Ray Vega, с репутацией 76069, 6.10.2008
  • 9 рейтинг
     SELECT * FROM information_schema.tables
    where TABLE_TYPE = 'BASE TABLE'
     

    SQL Server 2012

    ответ дан Rasoul Zabihi, с репутацией 795, 13.08.2013
  • 8 рейтинг
     SELECT name 
    FROM sysobjects 
    WHERE xtype='U' 
    ORDER BY name;
     

    (Стандарт SQL Server 2000, все еще поддерживается в SQL Server 2005.)

    ответ дан devio, с репутацией 32212, 6.10.2008
  • 6 рейтинг

    select * from sysobjects where xtype='U'

    ответ дан spoulson, с репутацией 17977, 6.10.2008
  • 5 рейтинг
    SELECT sobjects.name
    FROM sysobjects sobjects
    WHERE sobjects.xtype = 'U' 
    
    ответ дан Erikk Ross, с репутацией 2119, 6.10.2008
  • 4 рейтинг

    Недостатком INFORMATION_SCHEMA.TABLES является то, что он также включает в себя системные таблицы, такие как dtproperties и MSpeer_... таблицы, без возможности рассказать их отдельно от ваших собственных таблиц.

    Я бы рекомендовал использовать sys.objects (новая версия устаревшего представления sysobjects ), которая поддерживает исключение системных таблиц:

     select *
    from sys.objects
    where type = 'U'      -- User tables
    and is_ms_shipped = 0 -- Exclude system tables
     
    ответ дан Astrotrain, с репутацией 2549, 27.09.2017
  • 2 рейтинг

    В SSMS для получения всех полных имен таблиц в конкретной базе данных (например, «MyDatabase»):

     SELECT [TABLE_CATALOG] + '.' + [TABLE_SCHEMA] + '.' + [TABLE_NAME]
    FROM   MyDatabase.INFORMATION_SCHEMA.Tables
    WHERE  [TABLE_TYPE] = 'BASE TABLE' and [TABLE_NAME] <> 'sysdiagrams'
    ORDER BY [TABLE_SCHEMA], [TABLE_NAME]
     

    Результаты:

    • MyDatabase.dbo.MyTable1
    • MyDatabase.dbo.MyTable2
    • MyDatabase.MySchema.MyTable3
    • MyDatabase.MySchema.MyTable4
    • и т.п.
    ответ дан Scott Software, с репутацией 199, 13.10.2017
  • 2 рейтинг

    Пожалуйста, используйте это. Вы получите имена таблиц вместе с именами схем:

     SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
    FROM SYS.tables SYSTABLE
    INNER JOIN SYS.SCHEMAS SYSSCHEMA
    ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID
     
    ответ дан vikashspeaks, с репутацией 36, 23.11.2017
  • 1 рейтинг
    SELECT TABLE_NAME 
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_TYPE='BASE TABLE' 
    ORDER BY TABLE_NAME
    
    ответ дан Academy of Programmer, с репутацией 16872, 7.07.2017
  • 1 рейтинг

    Благодаря Ray Vega, чей ответ дает все пользовательские таблицы в базе данных ...

    exec sp_msforeachtable 'print' '?' ''

    sp_helptext показывает базовый запрос, который суммируется с ...

     select * from dbo.sysobjects o 
    join sys.all_objects syso on o.id =  syso.object_id  
    where OBJECTPROPERTY(o.id, 'IsUserTable') = 1 
    and o.category & 2 = 0 
     
    ответ дан Frank, с репутацией 31, 17.08.2017
  • 0 рейтинг
     --for oracle
    select tablespace_name, table_name from all_tables;
     

    Эта ссылка может предоставить гораздо больше информации по этой теме

    ответ дан Demietra95, с репутацией 76, 13.11.2015
  • 0 рейтинг

    вы можете просто сначала выбрать свою базу данных

     use database_name;
     

    то просто введите

     show tables;
     
    ответ дан Erfan Ahmed Emon, с репутацией 810, 20.01.2015