Нет способа изменить параметры сортировки всех текстовых столбцов на лету, но выполнимо манипулирование запросом для достижения того же результата. Ответ Мартина показывает один способ сделать это, вот другой, использующий метаданные запроса.В качестве преимущества, он не требует курсора и избегает произвольного ввода «новых» столбцов, если сортировка уже соответствует желаемому.Для него требуется как минимум SQL Server 2012 с sys.dm_exec_describe_first_result_set
и SQL Server 2017 с STRING_AGG
(в предыдущих версиях можно было использовать классические приемы для конкатенации строк, например FOR XML PATH
).
DECLARE @query NVARCHAR(MAX) = N'SELECT * FROM MyTable';
DECLARE @tweakedQuery NVARCHAR(MAX);
DECLARE @tweakedCollation SYSNAME = N'Latin1_General_CI_AS';
SELECT @tweakedQuery = CONCAT(
'SELECT ',
STRING_AGG(
CONCAT(
CONVERT(NVARCHAR(MAX), QUOTENAME([name])),
CASE
WHEN collation_name IS NOT NULL AND collation_name <> @tweakedCollation
THEN ' COLLATE ' + @tweakedCollation + ' AS ' + QUOTENAME([name])
END
),
', ' + CHAR(13) + CHAR(10)
),
' FROM (' + CHAR(13) + CHAR(10),
@query,
CHAR(13) + CHAR(10) + ') _'
)
FROM sys.dm_exec_describe_first_result_set(@query, NULL, NULL);
PRINT @tweakedQuery;
Включение пользовательских псевдонимов будет простым, если они генерируются систематически (на основе имени таблицы или столбца).В противном случае вам придется исправлять ошибки вручную.
Для одноразового запроса (а не того, что вам обязательно нужно делать на лету) все же гораздо лучше познакомиться с использованием регулярных выражений в вашем любимомредактор.Если в вашем любимом редакторе нет регулярных выражений, найдите тот, который имеет.