1

我正在使用 sql server 2012 及其后端的 asp.net mvc 多语言应用程序。

我已将支持前端的数据库的排序规则设置为“sql_latin1_general_cp1_ci_as”。

该数据库将存储英语、俄语、阿拉伯语等数据,因此我将在整理问题中运行,因为将访问我的数据的存储过程具有 where 子句、order by 子句等。

我有一组存储过程,我可以使用这些存储过程访问语言数据。我正在寻找如何解决我的问题的选项。

我正在考虑为每组数据创建一个视图并指定排序规则。我永远不会遇到跨不同语言进行查询的情况。或者,我可以在存储过程中指定排序规则,但这意味着我的存储过程对于每个排序规则都是不同的。

关于这里的整理挑战有什么建议或想法吗?

4

3 回答 3

0

对于初学者,您会希望所有列都是nvarchar. 这将解决您的存储问题。至于排序和过滤,正如您所说,排序规则变得很重要。

根据您对数据的处理方式以及需要用于过滤和排序的列数以及执行操作的方式,一种方法是使用动态 sql。你可以做类似的事情

declare @collation sysname = 'Latin1_General_CI_AS'
declare @cmd nvarchar(max)
set @cmd = 'select * from person order by last_name collate ' + @collation
exec sp_executesql @cmd

这不是一个很好的解决方案,但它确实有效。您还可以将排序规则放在视图中的任何字段之后,正如您所提到的,这是一个选项。像这样,然后您可以查询它而无需指定排序规则。

create view v_Person_RU as
select first_name collate Cyrillic_General_CI_AI, last_name collate Cyrillic_General_CI_AI...

create view v_Person_AR as
select first_name collate Arabic_CI_AI, last_name collate Arabic_CI_AI...

然后,您可以只选择正确的视图用于查询。

于 2013-05-07T03:57:04.017 回答
0

可能这对你有帮助-

SELECT DATABASEPROPERTYEX('<your_db>', 'collation')

SELECT * 
FROM dbo.table1 t
ORDER BY string_column COLLATE database_default -- i.e. sql_latin1_general_cp1_ci_as
于 2013-05-07T06:03:38.953 回答
0

用适当的排序规则试试这个

collate + @collation

谢谢,希望有帮助

于 2020-07-28T06:40:46.660 回答