Получение имен всех столбцов всех таблиц в SQL Server

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы получить список названий столбцов во всех таблицах и базах данных, воспользуйтесь системным представлением INFORMATION_SCHEMA.COLUMNS:

SQL
Скопировать код
SELECT 
    COLUMN_NAME, 
    TABLE_NAME, 
    TABLE_SCHEMA, 
    TABLE_CATALOG
FROM 
    INFORMATION_SCHEMA.COLUMNS
ORDER BY 
    TABLE_CATALOG, 
    TABLE_SCHEMA, 
    TABLE_NAME;

Этот запрос вернёт названия столбцов, указывая их принадлежность к определённым базам данных и таблицам. Чтобы получить результаты со всего сервера, запустите скрипт для каждой базы данных отдельно, либо используйте хранимую процедуру sp_MSforeachdb или динамический SQL.

Кинга Идем в IT: пошаговый план для смены профессии

Подробное рассмотрение

Многобазовый запрос с помощью sp_MSforeachdb

Для выполнения скрипта на всех базах данных одновременно можно воспользоваться неофициальной хранимой процедурой sp_MSforeachdb, которая позволяет выполнять SQL-запросы во всех базах данных.

SQL
Скопировать код
EXEC sp_MSforeachdb 'USE [?]; SELECT * FROM INFORMATION_SCHEMA.COLUMNS'

Внимание: Эта процедура не документирована Microsoft официально и может отсутствовать в будущих версиях SQL Server.

Использование представлений схемы для получения детальной информации о столбцах

Если вам необходимо узнать более подробную информацию о столбцах, например тип данных, допустимость NULL и размер, используйте стандартные представления схемы SQL Server.

SQL
Скопировать код
SELECT 
    COLUMN_NAME, 
    DATA_TYPE, 
    IS_NULLABLE, 
    CHARACTER_MAXIMUM_LENGTH 
FROM 
    INFORMATION_SCHEMA.COLUMNS;

Учет отличий в схемах баз данных

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

SQL
Скопировать код
DECLARE @DBName nvarchar(1000);
SET @DBName = N'MyDatabase'; -- Введите название вашей базы данных
EXEC ('USE ' + @DBName + '; SELECT * FROM INFORMATION_SCHEMA.COLUMNS');

Научно-юмористический совет от доктора Stack Overflow, доктора Null: "Проводите временем на конференциях о NULL, обсуждая "ничто".

Визуализация

Вообразите каждую базу данных как хранилище, где каждая таблица представляет собой структуру данных. Ваша задача — перечислить атрибуты (названия столбцов) всех структур (таблиц) во всех хранилищах (базах данных).

Markdown
Скопировать код
📦 Database1:         📦 Database2:         📦 Database3:
  📁 Table1:            📁 Table1:            📁 Table1:
    – 📄 Col1             – 📄 ColA              – 📄 ColI
    – 📄 Col2             – 📄 ColB              – 📄 ColII 
  📁 Table2:           ...                  ...
  ...

Расширение области применения для работы в разных SQL-средах

Использование sp_MSforeachdb для запросов ко всем базам данных

Процедура sp_MSforeachdb даёт возможность выполнить запросы для всех баз данных, что упрощает ваш подход к получению информации о столбцах в разных базах данных и позволяет не пропустить важные детали.

SQL
Скопировать код
EXEC sp_MSforeachdb '
USE [?]; 
SELECT * 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME LIKE ''%ваш_шаблон_столбца%''

Шутка с Reddit: SQL-запросы — это как хорошее вино: они должны быть структурированы, вкусны и содержать смысл.

Динамический SQL для переключения между базами данных в запросах

Если процедура sp_MSforeachdb недоступна, динамический SQL станет надёжной альтернативой. Он позволяет переключаться между базами данных в запросах, обеспечивая высокую гибкость и точность при извлечении данных.

SQL
Скопировать код
DECLARE @sqlCommand NVARCHAR(MAX);
SET @sqlCommand = N'USE [?]; SELECT * FROM INFORMATION_SCHEMA.COLUMNS';
-- Выполните команду и выводите результат
EXEC sp_executesql @sqlCommand;

Кулинарный совет: как шеф-повар тщательно нарезает ингредиенты, так и разработчик SQL аккуратно "отсекает" ненужные данные, чтобы сделать запрос максимально чистым и "аппетитным".

Полезные материалы

  1. Как мне получить названия столбцов из таблицы в SQL Server? – Stack Overflow
  2. Как разделить уже существующую таблицу в SQL Server – MSSQLTips
  3. Почему я получаю ошибку "Undefined index" в моем коде на PHP? – Stack Overflow