Выбрать все столбцы из всех таблиц в SQL Server 2008 - PullRequest
9 голосов
/ 08 октября 2009

Как выбрать все столбцы из всех таблиц в БД, например:

Select * From * 

в SQL Server 2008 ???

Список таблиц очень большой, и в нем так много столбцов, возможно ли это сделать без написания имен столбцов?

Или, может быть, сделать выборку, которая возвращает имя таблицы.

Ответы [ 6 ]

28 голосов
/ 08 октября 2009

Этот SQL сделает это ...

DECLARE @SQL AS VarChar(MAX)
SET @SQL = ''

SELECT @SQL = @SQL + 'SELECT * FROM ' + TABLE_SCHEMA + '.[' + TABLE_NAME + ']' + CHAR(13)
FROM INFORMATION_SCHEMA.TABLES

EXEC (@SQL)
10 голосов
/ 26 декабря 2011
SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID where t.name = 'ProductItem'  AND C.name like '%retail%'
ORDER BY schema_name, table_name 
6 голосов
/ 10 марта 2014

Попробуйте, отлично работает

SELECT * FROM INFORMATION_SCHEMA.COLUMNS 

тогда вы можете добавить

WHERE TABLE_NAME LIKE '' AND COLUMN_NAME LIKE ''
3 голосов
/ 08 октября 2009

Возможно получить имя всех столбцов из sys.columns
Можно извлечь имя всей таблицы из sys.tables

Но невозможно получить все данные из всех таблиц. Как только в запросе участвуют более одной таблицы, необходимо JOIN. Если не указаны условия объединения, таблицы объединяются как полный декартово произведение, что означает, что каждая строка в каждой таблице сопоставляется с каждой строкой из всех других таблиц. Такой запрос, который вы запросите, будет производить для 10 таблиц с 10 записями в каждой не менее 10e10 записей, т.е. 100 миллиардов записей. Я уверен, что ты не хочешь этого.

Возможно, если вы объясните, чего вы хотите достичь, а не как , мы можем помочь лучше.

Чтобы выбрать * из каждой таблицы одну за другой, вы можете использовать недокументированный, но хорошо известный sp_msforeachtable:

sp_msforeachtable 'select  * from ?'
2 голосов
/ 16 августа 2018

В SQL Server 2016 Management Studio (версия: 13.0.15900.1), чтобы получить все имена столбцов в указанной таблице, ниже приведен синтаксис:

   **Select name from [YourDatabaseName].[sys].[all_columns] 
   where object_id=(Select object_id from [YourDatabaseName].[sys].[tables] 
   where name='YourTableName')**
2 голосов
/ 08 октября 2009

Если вы собираетесь отправить в Excel, я бы посоветовал вам воспользоваться мастером экспорта и просто выбрать все таблицы там. В браузере объектов наведите курсор на имя базы данных и щелкните правой кнопкой мыши. Выберите Задачи - Экспорт данных и следуйте указаниям мастера. Почему кто-то хочет, чтобы вся база данных в Excel была за мной, но это лучший способ. Если вам нужно сделать это несколько раз, вы можете сохранить экспорт в пакете служб SSIS.

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