gpt4 book ai didi

tsql - 针对SQL Server中的不同排序规则对列进行排序

转载 作者:行者123 更新时间:2023-12-04 20:23:20 25 4
gpt4 key购买 nike

我有一个Company表,该表具有多语言的CompanyName列(定义为nvarchar(512))。

我也有一个存储过程来搜索并返回公司列表,它使用2个nvarchar参数-一个是搜索词,另一个是ISO语言代码。

我想做的是返回搜索结果,该结果以适合于第二个参数中提供的语言代码的排序规则进行排序,例如:

SELECT * FROM dbo.Companies WHERE CompanyName LIKE '%searchstring%'
ORDER BY
CASE @lang
WHEN 'sv' THEN CompanyName COLLATE Sami_Sweden_Finland_100_CI_AI
WHEN 'ch' THEN CompanyName COLLATE Chinese_Simplified_Pinyin_100_CI_AI
ELSE CompanyName
END

但是,当我尝试运行它时,出现以下错误:

Cannot resolve the collation conflict between "Chinese_Simplified_Pinyin_100_CI_AI" and "Sami_Sweden_Finland_100_CI_AI" in the CASE operation.



这对我来说没有任何意义-并不是我在排序规则中进行排序,为什么会有排序规则冲突?这是一个互斥的选择。

我试图不要太聪明,而只是使用动态sql,不幸的是,这似乎使数据库无法缓存执行计划,因此,当表中包含大约30秒时,查询时间将超过20秒(而不是1)。 200万行。

我确定对文化敏感的排序必定是一个普遍的问题,有谁知道一个不涉及更改当前架构的好的解决方案(例如,必须创建其他列)?

最佳答案

列只能有一个排序规则。 CASE表示您正在尝试使多个相互冲突。试试这个:

SELECT * FROM dbo.Companies WHERE CompanyName LIKE '%searchstring%'
ORDER BY
CASE @lang
WHEN 'sv' THEN CompanyName ELSE '' END
END COLLATE Sami_Sweden_Finland_100_CI_AI,
CASE @lang
WHEN 'ch' THEN CompanyName ELSE '' END
END Chinese_Simplified_Pinyin_100_CI_AI

关于tsql - 针对SQL Server中的不同排序规则对列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3905666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com