Запрос для получения имен всех таблиц в базе данных SQL Server 2008 - PullRequest
28 голосов
/ 21 мая 2010

Можно ли написать запрос, который даст мне имена всех таблиц в базе данных SQL Server? Я работаю над документацией «по факту» в системе, которую не создал, и ищу ярлык для получения списка таблиц в базе данных.

Ответы [ 6 ]

48 голосов
/ 21 мая 2010

В одной базе данных - да:

USE your_database
SELECT name FROM sys.tables

Получение всех таблиц во всех базах данных - только с помощью хака ... см. Этот вопрос SO для нескольких подходов, как это сделать: Как мне перечислить все таблицы во всех базах данных в SQL Server в одном наборе результатов

8 голосов
/ 21 мая 2010

по-другому, также будет работать на MySQL и PostgreSQL

select TABLE_NAME from INFORMATION_SCHEMA.TABLES
where TABLE_TYPE = 'BASE TABLE'
4 голосов
/ 21 мая 2010

Попробуйте это:

SELECT s.NAME + '.' + t.NAME AS TableName
FROM sys.tables t
INNER JOIN sys.schemas s
    ON t.schema_id = s.schema_id

будет отображать схему + имя таблицы для всех таблиц в текущей базе данных.

Вот версия, в которой будут перечислены все таблицы в каждой базе данных на текущем сервере. он позволяет использовать параметр поиска в любой части или частях сервера + база данных + схема + имена таблиц:

SET NOCOUNT ON
DECLARE @AllTables table (CompleteTableName nvarchar(4000))
DECLARE @Search nvarchar(4000)
       ,@SQL   nvarchar(4000)
SET @Search=null --all rows
SET @SQL='select @@SERVERNAME+''.''+''?''+''.''+s.name+''.''+t.name from [?].sys.tables t inner join sys.schemas s on t.schema_id=s.schema_id WHERE @@SERVERNAME+''.''+''?''+''.''+s.name+''.''+t.name LIKE ''%'+ISNULL(@SEARCH,'')+'%'''

INSERT INTO @AllTables (CompleteTableName)
    EXEC sp_msforeachdb @SQL
SET NOCOUNT OFF
SELECT * FROM @AllTables ORDER BY 1

установите для @Search значение NULL для всех таблиц, установите для него такие значения, как 'dbo.users' или 'users' или '.master.dbo', или даже включите подстановочные знаки, такие как '.master.%. U' и т. Д.

1 голос
/ 27 ноября 2014

Чтобы получить информацию о полях, вы можете использовать следующее:

SELECT TABLE_SCHEMA, TABLE_NAME, 
       COLUMN_NAME, substring(DATA_TYPE, 1,1) AS DATA_TYPE
FROM information_schema.COLUMNS 
WHERE TABLE_SCHEMA NOT IN("information_schema", "mysql", "performance_schema") 
ORDER BY TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION
0 голосов
/ 02 октября 2017

Пожалуйста, используйте следующий запрос для вывода списка таблиц в вашей БД.

select name from sys.Tables 

Кроме того, вы можете добавить условие where, чтобы пропустить сгенерированные системой таблицы и перечислить только созданные пользователем таблицы, добавив type ='U'

Пример: select name from sys.Tables where type ='U'

0 голосов
/ 14 июля 2017
sys.tables

Содержит все таблицы. поэтому выполните этот запрос, чтобы получить все таблицы с подробностями.

SELECT * FROM sys.tables

enter image description here

или просто выберите Имя из sys.tables, чтобы получить имя всех таблиц.

SELECT Name From sys.tables
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...