Получение деталей столбцов SQL Server: типы данных, PK

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

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

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

Для получения данных о столбцах применяем следующий SQL-запрос:

SQL
Скопировать код
SELECT
    col.COLUMN_NAME, -- наименование столбца
    col.DATA_TYPE, -- тип данных столбца
    CASE
        WHEN col.IS_NULLABLE = 'NO' THEN 'NOT NULL' -- условие NOT NULL
    END as IS_NULLABLE,
    CASE
        WHEN pk.COLUMN_NAME IS NOT NULL THEN 'PRIMARY KEY' -- обозначение PRIMARY KEY
    END as COLUMN_KEY
FROM 
    INFORMATION_SCHEMA.COLUMNS col
LEFT JOIN 
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE pk ON
    col.TABLE_SCHEMA = pk.TABLE_SCHEMA AND
    col.TABLE_NAME = pk.TABLE_NAME AND
    col.COLUMN_NAME = pk.COLUMN_NAME AND
    pk.CONSTRAINT_NAME = (
        SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
        WHERE 
            (TABLE_SCHEMA = col.TABLE_SCHEMA OR TABLE_SCHEMA IS NULL) AND
            TABLE_NAME = col.TABLE_NAME AND
            CONSTRAINT_TYPE = 'PRIMARY KEY'
    )
WHERE 
    col.TABLE_NAME = 'YourTableName' AND
    (col.TABLE_SCHEMA = 'YourSchemaName' OR col.TABLE_SCHEMA IS NULL)
ORDER BY 
    col.ORDINAL_POSITION;

Необходимо заменить 'YourTableName' и 'YourSchemaName' на имена нужной вам таблицы и схемы. Запрос выдаст точные наименования столбцов, типы данных, информацию о NOT NULL и PRIMARY KEY.

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

Обращение к системным каталогам

Если вам нужна подробная информация о структуре таблицы, обратитесь к системным представлениям каталога SQL Server:

SQL
Скопировать код
SELECT
    c.name AS 'Название столбца',
    t.name AS 'Тип данных',
    c.max_length AS 'Максимальная длина',
    c.precision AS 'Точность',
    c.scale AS 'Масштаб',
    c.is_nullable AS 'NULL допустим',
    CASE WHEN ic.is_primary_key = 1 THEN 'Да' ELSE 'Нет' END AS 'Является ли первичным ключом'
FROM 
    sys.columns c
INNER JOIN 
    sys.types t ON c.user_type_id = t.user_type_id
LEFT OUTER JOIN 
    sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
LEFT OUTER JOIN 
    sys.indexes i ON i.object_id = ic.object_id AND i.index_id = ic.index_id AND i.is_primary_key = 1
WHERE 
    c.object_id = OBJECT_ID('YourSchemaName.YourTableName')
ORDER BY 
    c.column_id;

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

Использование sp_columns и sp_describe_first_result_set

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

  • sp_columns: Этот метод возвращает информацию о типах данных и допустимости NULL, но не информацию о первичных ключах. Для быстрого просмотра столбцов используйте EXEC sp_columns 'YourTableName';.

  • sp_describe_first_result_set (Доступно с SQL Server 2012): Предоставляет метаданные первого результата SQL-запроса. Команда EXEC sp_describe_first_result_set N'SELECT * FROM YourSchemaName.YourTableName'; позволяет узнать структуру результатов вашего запроса.

Однако, эти методы могут не дать полного представления обо всех ограничениях.

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

Представьте себе структуру таблицы как игровое поле:

Markdown
Скопировать код
🧱 = Столбец
🏷️ = Тип данных
🔒 = NOT NULL
🔑 = PRIMARY KEY

Игровое поле (Таблица):
--------------------------------------
| 🧱 | 🏷️ | 🔒 | 🔑 |
|----|----|----|----|
|  1 |  A | 🔒 |    | <- Столбец NOT NULL без PRIMARY KEY
|  2 |  B |    | 🔑 | <- Столбец с PRIMARY KEY
|  3 |  C |    |    | <- Столбец, допускающий NULL
|  4 |  D | 🔒 | 🔑 | <- Столбец NOT NULL и PRIMARY KEY
--------------------------------------

Каждый элемент этой диаграммы отражает свойства соответствующего столбца в таблице.

Поглубже в детали метаданных

В SQL Server есть и другие свойства столбцов:

  • Идентификационные столбцы: Это можно установить с помощью функции COLUMNPROPERTY.
  • Ограничения по умолчанию: Они могут быть исследованы через sys.default_constraints.
  • Вычисляемые столбцы: Определяются через атрибут is_computed в sys.columns.

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

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

  1. Системные представления схемы информации (Transact-SQL) – SQL Server | Обучение Microsoft
  2. sys.objects (Transact-SQL) – SQL Server | Обучение Microsoft
  3. Первичные и внешние ключи – SQL Server | Обучение Microsoft
  4. Типы данных (Transact-SQL) – SQL Server | Обучение Microsoft
  5. Как получить список всех таблиц в базе данных с помощью T-SQL?