Не совсем - вы действительно делаете динамический разворот.Можно использовать OPENROWSET, чтобы получить динамически сгенерированный запрос, но если это целесообразно, трудно сказать, не видя больше о бизнес-случае.
Сначала создает хранимый процесс, который выполняет динамический поворот , как я делал в Проводнике данных StackExchange.
По сути, вы генерируете динамический SQL, который строит список столбцов.Это действительно может быть сделано только в хранимой процедуре.Что хорошо для вызовов приложений.
Но что если вы захотите повторно использовать это во множестве различных объединений или специальных запросов?
Затем взгляните на эта статья : «Использование серверов SQL OPENROWSET для нарушения правил»
Теперь вы можете вызвать сохраненный процесс, вернувшись обратно на сервер, а затем получив результаты в наборе строк - это может быть в представлении!
У покойного Кена Хендерсона есть несколько хороших примеров этого в его превосходной книге : «Руководство гуру по хранимым процедурам SQL Server, XML и HTML» (вам нужно любить маленькое«Обложки .NET!» На обложке, которая хорошо отражает дух времени за 2002 год!).
Он охватывает только петлевую часть (с представлениями и пользовательскими функциями), менее подробный синтаксис PIVOT был недоступен, пока2005, но PIVOT также могут быть сгенерированы с помощью оператора CASE как характеристическая функция .
Очевидно, что у этого метода есть предостережения (я даже не могу сделать это на нашем производственном сервере)э).