Как использовать 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
Другие вопросы по тегам