まず、すべての列を nvarchar
にする必要があります。 .これで、ストレージの問題が解決されます。並べ替えとフィルタリングに関しては、おっしゃる通り照合が重要になります。
データで何をしているか、フィルタリングと並べ替えに使用する必要がある列の数、および操作をどのように行っているかに応じて、それを行う 1 つの方法は動的 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...
次に、クエリに使用する適切なビューを選択するだけです。