Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

sql server di confronto per dati multilingue

Per cominciare, vorrai che tutte le tue colonne siano nvarchar . Questo si prenderà cura dei tuoi problemi di archiviazione. Per quanto riguarda l'ordinamento e il filtraggio, le regole di confronto diventano importanti, come dici tu.

A seconda di cosa stai facendo con i dati e di quante colonne devi usare per filtrare e ordinare e come stai facendo le operazioni, un modo per farlo è con sql dinamico. Puoi fare qualcosa come

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

Non è un'ottima soluzione, ma funziona. Puoi anche inserire le regole di confronto dopo qualsiasi campo in una vista, quindi, come hai detto, questa è un'opzione. Qualcosa del genere, quindi puoi interrogarlo senza dover specificare le regole di confronto.

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

Quindi puoi semplicemente scegliere la vista giusta da utilizzare per le query.