Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

classement du serveur sql pour les données multilingues

Pour commencer, vous voudrez que toutes vos colonnes soient nvarchar . Cela résoudra vos problèmes de stockage. En ce qui concerne le tri et le filtrage, les classements deviennent importants comme vous le dites.

En fonction de ce que vous faites avec les données et du nombre de colonnes que vous devez utiliser pour le filtrage et le tri et de la façon dont vous effectuez les opérations, une façon de le faire est d'utiliser SQL dynamique. Vous pouvez faire quelque chose comme

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

Ce n'est pas une bonne solution, mais ça marche. Vous pouvez également jeter le classement après n'importe quel champ dans une vue, donc comme vous l'avez mentionné, c'est une option. Quelque chose comme ça, et ensuite vous pouvez l'interroger sans avoir à spécifier de classement.

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...

Ensuite, vous pouvez simplement choisir la bonne vue à utiliser pour l'interrogation.