我正在使用sql server 2012及其后端用于asp.net mvc多语言应用程序。
我已将数据库的排序规则设置为“sql_latin1_general_cp1_ci_as”。
这个数据库将存储,英语,俄语,阿拉伯语等数据,因此我将运行整理问题,因为我的存储过程将访问我的数据有where子句,order by子句等。
我有一组存储过程,我用它来访问语言数据。我正在寻找如何解决我的问题的选项。
我在考虑为每组数据创建一个视图,并在其上指定排序规则。我永远不会有我将在不同语言中查询的场景。或者,我可以在存储过程中指定排序规则,但这意味着每个排序规则的存储过程都不同。
关于排序规则如何挑战的任何建议或想法?
答案 0 :(得分: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...
然后您可以使用选择正确的视图来进行查询。
答案 1 :(得分: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
答案 2 :(得分:0)
尝试使用适当的排序规则
collate + @collation
谢谢,希望对您有帮助