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

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

Ответ 1

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' 

Ответ 2

SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'

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

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

Ответ 3

SELECT * FROM INFORMATION_SCHEMA.TABLES 

или

SELECT * FROM Sys.Tables

Ответ 4

select * from sys.tables;

ИЛИ

SELECT * FROM INFORMATION_SCHEMA.TABLES 

ИЛИ

SELECT * FROM sysobjects WHERE xtype='U'

Ответ 5

USE YourDBName
GO 
SELECT *
FROM sys.Tables
GO

ИЛИ ЖЕ

USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES 
GO

Ответ 6

exec sp_msforeachtable 'print ''?'''

Ответ 7

SELECT * FROM information_schema.tables
where TABLE_TYPE = 'BASE TABLE'

SQL Server 2012

Ответ 8

SELECT name 
FROM sysobjects 
WHERE xtype='U' 
ORDER BY name;

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

Ответ 9

select * from sysobjects where xtype='U'

Ответ 10

SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U' 

Ответ 11

Недостатком 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

Ответ 12

В 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
  • и др.

Ответ 13

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

SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
FROM SYS.tables SYSTABLE
INNER JOIN SYS.SCHEMAS SYSSCHEMA
ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID

Ответ 14

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

use database_name;

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

show tables;

Ответ 15

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

Ответ 16

Благодаря 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 

Ответ 17

--for oracle
select tablespace_name, table_name from all_tables;

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

Ответ 18

Использование SELECT * FROM INFORMATION_SCHEMA.COLUMNS также показывает все таблицы и связанные столбцы.