Tsql теория > T-SQL – UNPIVOT vs Dynamic SQL vs VALUES
28.05.2018 17:19:36
Наиболее часто встречающиеся слова в статье:
[использовать] [UserBadges] [object_id] [SMALLINT] [BadgeCount] [BadgeType] [столбцов] [column_id] [OBJECT_ID] [UserBadges'']
Статья:
Чтобы задача не казалось абстрактной, предположим, что в нашем распоряжении
таблица, содержащая информацию о количестве медалей среди пользователей.
Начиная с SQL Server 2008 стало возможным использовать конструкцию VALUES не только для создания многострочных INSERT запросов, но и внутри блока FROM.
Применяя конструкцию VALUES, запрос выше можно переписать так:
UNPIVOT
С релизом SQL Server 2005, стало возможным использовать новую конструкцию языка T-SQL – UNPIVOT.
Применяя UNPIVOT предыдущий запрос можно упростить до:
Dynamic SQL
Применяя динамический SQL, есть возможность создать «универсальный» запрос для любой таблицы. Главное условие при этом — столбцы, которые не входят в состав первичного ключа, должны иметь совместимые между собой типы данных.
Узнать список таких столбцов можно следующим запросом:
В ситуации, когда необходимо произвести простое преобразование столбцов в
строки, то наиболее предпочтительно использовать конструкции UNPIVOT или VALUES.
Если после преобразования, полученные данные планируется использовать в
операциях агрегирования или сортировки, то более предпочтительно использовать
именно конструкцию VALUES,
которая, в большинстве случаев, позволяет получать более эффективные планы
выполнения.
Если число столбцов в таблицы переменчиво, рекомендуется использовать XML,
который в отличии от динамического SQL можно использовать внутри табличных
функций.