SQL Server Как установить у таблицы описание (MS Description)
Автоматизация описаний таблиц и колонок в SQL Server: процедура sys_setTableDescription
Если вы хоть раз работали с БД в команде, то знаете — описания (descriptions) к таблицам и колонкам спасают. Без них через месяц уже не вспомнить, что хранится в поле col1. А новых разработчиков вводить в курс дела — вообще мучение.
В SSMS описания можно посмотреть и отредактировать в окне Design Table. Но вручную это делать долго и скучно. Особенно если таблиц сто.
Поэтому я написал небольшую, но полезную процедуру — sys_setTableDescription. Она сама добавляет или обновляет описание для таблицы или конкретной колонки. Умная — проверяет, есть ли уже описание, и если есть — просто обновляет его.
Как это работает
- Передаёте имя таблицы (
@table) - Если нужно описать колонку — передаёте её имя (
@column). Если описание для всей таблицы —NULL - Текст описания (
@desc) — любой, в форматеsql_variant
Процедура сама решает: вызывать sp_addextendedproperty (если описания ещё нет) или sp_updateextendedproperty (если уже есть).
Примеры из реальной жизни
- Описание таблицы:
EXEC [dbo].[sys_setTableDescription] @table = 'Orders', @column = NULL, @desc = 'Таблица заказов клиентов'
После этого в SSMS в свойствах таблицы Orders появится описание. - Описание колонки:
EXEC [dbo].[sys_setTableDescription] @table = 'Orders', @column = 'TotalAmount', @desc = 'Итоговая сумма заказа без НДС'
Теперь, наведя на колонку TotalAmount в обозревателе объектов, увидите это описание. - Массовое обновление:
Можно обернуть вызовы в курсор и прогнать по всем таблицам схемы. Но это уже другая история.
Исходный код процедуры
ALTER PROCEDURE [dbo].[sys_setTableDescription]
@table nvarchar(128), -- table name
@column nvarchar(128), -- column name, NULL if description for table
@desc sql_variant -- description text
AS
BEGIN
SET NOCOUNT ON;
IF @column IS NOT NULL
IF NOT EXISTS (SELECT NULL FROM SYS.EXTENDED_PROPERTIES
WHERE [major_id] = OBJECT_ID(@table) AND [name] = N'MS_Description'
AND [minor_id] = (SELECT [column_id]
FROM SYS.COLUMNS WHERE [name] = @column AND [object_id] = OBJECT_ID(@table)))
EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = @desc,
@level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE',
@level1name = @table, @level2type = N'COLUMN', @level2name = @column;
ELSE
EXECUTE sp_updateextendedproperty @name = N'MS_Description',
@value = @desc, @level0type = N'SCHEMA', @level0name = N'dbo',
@level1type = N'TABLE', @level1name = @table,
@level2type = N'COLUMN', @level2name = @column;
ELSE
IF NOT EXISTS (SELECT NULL FROM SYS.EXTENDED_PROPERTIES
WHERE [major_id] = OBJECT_ID(@table) AND [name] = N'MS_Description'
AND [minor_id] = 0)
EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = @desc,
@level0type = N'SCHEMA', @level0name = N'dbo',
@level1type = N'TABLE', @level1name = @table;
ELSE
EXECUTE sp_updateextendedproperty @name = N'MS_Description', @value = @desc,
@level0type = N'SCHEMA', @level0name = N'dbo',
@level1type = N'TABLE', @level1name = @table;
END
Совет: Описания — это не документ на 10 страниц. Пишите коротко и по делу. Например: "Флаг мягкого удаления" вместо "Данное поле указывает, была ли запись помечена как удалённая в системе".
Что еще посмотреть по SQL Server
Как запустить SQL сценарий сразу на нескольких БД
Индексы SQL Server. Поиск дубликатов
Запрос для получения SQL всех индексов для таблиц базы данных SQL Server
Как перестроить все индексы на базе SQL Server
Как разрезать строку на части в SQL по некоторому символу
Конвертация из строки в таблицу в SQL Server
Выполнение прямого запроса к URL из SQL
Как получить текущего юзера БД
Как хранить в 1 поле таблицы БД значения разных типов?
Дополнительный заработок для разработчиков на T-SQL
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта