Как использовать COLLATE на основе функции в T-SQL?
У меня есть следующая функция для установки COLLATE для столбца @p на основе параметра @c. Я был вдохновлен этим ответом.
CREATE FUNCTION [dbo].[fnsConvert]
(
@p NVARCHAR(2000),
@c NVARCHAR(2000)
)
RETURNS NVARCHAR(2000)
AS
BEGIN
IF ( @c = 'sv-SE' )
SET @p = @p COLLATE Finnish_Swedish_100_CI_AS
ELSE
SET @p = @p COLLATE SQL_Latin1_General_CP1_CI_AS
RETURN @p
END
Вот как я это использую:
SELECT Title FROM Things
ORDER BY dbo.fnsConvert(Title, 'sv-SE')
Результат: AÅÄBCÖ Ожидаемый: ABCÅÄÖ
В попытке отладить его я запускаю
DECLARE @l nvarchar(255)
DECLARE @P nvarchar(255)
EXEC @l = dbo.fnsConvert
@p = Test, @c = 'sv-SE';
SELECT @l
Это просто возвращает строку Test. Я ожидал бы, что он также будет содержать инструкцию COLLATE, но я вполне могу ошибаться в этом.
1 ответ
Вы должны добавить сопоставление для order by
, Сортировка - это определение типа, и вы не можете изменить его с помощью заданной операции.
SELECT Title FROM Things
ORDER BY Title COLLATE Finnish_Swedish_100_CI_AS