Как получить список всех таблиц в базе данных, используя TSQL? - PullRequest
821 голосов
/ 06 октября 2008

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

Ответы [ 19 ]

4 голосов
/ 27 сентября 2017

Недостатком 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
2 голосов
/ 23 ноября 2017

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

SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
FROM SYS.tables SYSTABLE
INNER JOIN SYS.SCHEMAS SYSSCHEMA
ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID
2 голосов
/ 13 октября 2017

В 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
  • и т.д.
1 голос
/ 18 августа 2017

Спасибо Рэю Веге, чей ответ дает все пользовательские таблицы в базе данных ...

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 
1 голос
/ 07 июля 2017
SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE='BASE TABLE' 
ORDER BY TABLE_NAME
1 голос
/ 20 января 2015

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

use database_name;

тогда просто наберите

show tables;
0 голосов
/ 16 февраля 2019

Ну, вы можете использовать sys.objects , чтобы получить все объекты базы данных.

 GO
 select * from sys.objects where type_desc='USER_TABLE' order by name
 GO

OR

--  For all tables
select * from INFORMATION_SCHEMA.TABLES 
GO 

  --- For user defined tables
select * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='BASE TABLE'
GO

  --- For Views
select * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='VIEW'
GO
0 голосов
/ 07 января 2019

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

0 голосов
/ 13 ноября 2015
--for oracle
select tablespace_name, table_name from all_tables;

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

...