Получение имен всех столбцов всех таблиц в SQL Server
Быстрый ответ
Чтобы получить список названий столбцов во всех таблицах и базах данных, воспользуйтесь системным представлением INFORMATION_SCHEMA.COLUMNS
:
SELECT
COLUMN_NAME,
TABLE_NAME,
TABLE_SCHEMA,
TABLE_CATALOG
FROM
INFORMATION_SCHEMA.COLUMNS
ORDER BY
TABLE_CATALOG,
TABLE_SCHEMA,
TABLE_NAME;
Этот запрос вернёт названия столбцов, указывая их принадлежность к определённым базам данных и таблицам. Чтобы получить результаты со всего сервера, запустите скрипт для каждой базы данных отдельно, либо используйте хранимую процедуру sp_MSforeachdb
или динамический SQL.
Подробное рассмотрение
Многобазовый запрос с помощью sp_MSforeachdb
Для выполнения скрипта на всех базах данных одновременно можно воспользоваться неофициальной хранимой процедурой sp_MSforeachdb
, которая позволяет выполнять SQL-запросы во всех базах данных.
EXEC sp_MSforeachdb 'USE [?]; SELECT * FROM INFORMATION_SCHEMA.COLUMNS'
Внимание: Эта процедура не документирована Microsoft официально и может отсутствовать в будущих версиях SQL Server.
Использование представлений схемы для получения детальной информации о столбцах
Если вам необходимо узнать более подробную информацию о столбцах, например тип данных, допустимость NULL и размер, используйте стандартные представления схемы SQL Server.
SELECT
COLUMN_NAME,
DATA_TYPE,
IS_NULLABLE,
CHARACTER_MAXIMUM_LENGTH
FROM
INFORMATION_SCHEMA.COLUMNS;
Учет отличий в схемах баз данных
Работая с различными базами данных, стоит учитывать их схемы, потому что столбцы могут различаться. В таких случаях используйте следующий динамический SQL, который адаптирует запросы к изменяющемуся контексту.
DECLARE @DBName nvarchar(1000);
SET @DBName = N'MyDatabase'; -- Введите название вашей базы данных
EXEC ('USE ' + @DBName + '; SELECT * FROM INFORMATION_SCHEMA.COLUMNS');
Научно-юмористический совет от доктора Stack Overflow, доктора Null: "Проводите временем на конференциях о NULL, обсуждая "ничто".
Визуализация
Вообразите каждую базу данных как хранилище, где каждая таблица представляет собой структуру данных. Ваша задача — перечислить атрибуты (названия столбцов) всех структур (таблиц) во всех хранилищах (базах данных).
📦 Database1: 📦 Database2: 📦 Database3:
📁 Table1: 📁 Table1: 📁 Table1:
– 📄 Col1 – 📄 ColA – 📄 ColI
– 📄 Col2 – 📄 ColB – 📄 ColII
📁 Table2: ... ...
...
Расширение области применения для работы в разных SQL-средах
Использование sp_MSforeachdb для запросов ко всем базам данных
Процедура sp_MSforeachdb
даёт возможность выполнить запросы для всех баз данных, что упрощает ваш подход к получению информации о столбцах в разных базах данных и позволяет не пропустить важные детали.
EXEC sp_MSforeachdb '
USE [?];
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE ''%ваш_шаблон_столбца%''
Шутка с Reddit: SQL-запросы — это как хорошее вино: они должны быть структурированы, вкусны и содержать смысл.
Динамический SQL для переключения между базами данных в запросах
Если процедура sp_MSforeachdb
недоступна, динамический SQL станет надёжной альтернативой. Он позволяет переключаться между базами данных в запросах, обеспечивая высокую гибкость и точность при извлечении данных.
DECLARE @sqlCommand NVARCHAR(MAX);
SET @sqlCommand = N'USE [?]; SELECT * FROM INFORMATION_SCHEMA.COLUMNS';
-- Выполните команду и выводите результат
EXEC sp_executesql @sqlCommand;
Кулинарный совет: как шеф-повар тщательно нарезает ингредиенты, так и разработчик SQL аккуратно "отсекает" ненужные данные, чтобы сделать запрос максимально чистым и "аппетитным".