Wendelius
Даже если это возможно, изменение имен столбцов на основе значений данных обычно не выполняется. Это значительно усложнило бы кодирование на вызывающей стороне, поскольку программа больше не знает имен, поэтому ссылаться на столбцы в результирующем наборе становится сложнее, а в некоторых случаях даже невозможно.
Другое дело, что если результирующий набор содержит две строки и значения для одного и того же столбца в этих строках различны? Каким должно быть имя столбца в таком случае?
[Редактировать:]
Один из способов сделать это-извлечь данные и на их основе создать запрос с пользовательскими именами столбцов.
Но для этого вам нужно будет один раз получить данные для определения имен столбцов, а затем снова получить данные, чтобы иметь их с пользовательскими именами столбцов. Как уже отмечалось, это не имело бы смысла. Было бы гораздо проще, например, принести данные клиенту, а затем изменить отображаемые имена по мере необходимости...
Чтобы продемонстрировать один из вариантов того, как это может быть достигнуто, рассмотрим следующее. Но, как уже было сказано, Я действительно не рекомендую этого делать.
Создание тестовых данных
CREATE TABLE ColumNameTest (
col1 int,
col2 int);
INSERT INTO ColumNameTest (col1, col2) VALUES
(1,2),
(3,null),
(null,6);
Создайте и запустите запрос
DECLARE @query nvarchar(max)
DECLARE @alias nvarchar(max)
SET @query = ' SELECT '
SELECT @alias = STUFF((SELECT ',' + COALESCE(CAST(col1 AS nvarchar(100)), 'null') FROM columnametest FOR XML PATH('')),1,1,'');
SET @query = @query + ' col1 AS [' + @alias + ']'
SELECT @alias = STUFF((SELECT ',' + COALESCE(CAST(col2 AS nvarchar(100)), 'null') FROM columnametest FOR XML PATH('')),1,1,'');
SET @query = @query + ', col2 AS [' + @alias + ']'
SET @query = @query + ' FROM ColumNameTest'
PRINT @query
EXEC sp_executesql @query
Динамически построенный запрос будет выглядеть следующим образом
SELECT col1 AS [1,3,null], col2 AS [2,null,6] FROM ColumNameTest
и вот результат
1,3,null 2,null,6
-------- --------
1 2
3 NULL
NULL 6