Tsql 如何基于T-SQL中的函数使用COLLATE?

Tsql 如何基于T-SQL中的函数使用COLLATE?,tsql,user-defined-functions,collate,Tsql,User Defined Functions,Collate,我有以下函数,用于根据@c参数为列@p设置COLLATE。我的灵感来自 我就是这样使用它的: 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'; S

我有以下函数,用于根据@c参数为列@p设置COLLATE。我的灵感来自

我就是这样使用它的:

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

这只是返回字符串测试。我希望它也包含COLLATE语句,但我很可能错了。

您应该将collation添加到
order by
。排序规则是类型定义,不能通过集合操作更改它

SELECT Title FROM Things
ORDER BY Title COLLATE Finnish_Swedish_100_CI_AS

我认为,你之前读到的链接答案是不正确的。。。简单变量不知道其排序规则…标量函数不能返回具有隐含排序规则的值。正如Shnugo所说,你链接上的答案是错误的。您必须使用动态SQL执行此操作,因为排序规则无法参数化。排序规则是比较模式,而不是字符串变量的属性
COLLATE
关键字意味着用于比较的排序规则(从而建立索引)
SELECT Title FROM Things
ORDER BY Title COLLATE Finnish_Swedish_100_CI_AS