Narazil jsem na zajímavý problém, který zatím neumím řešit. Pokud děláme multiple language aplikaci, tak by bylo vhodné, měnit řazení dat podle nastavené kultury CurrentCulture. Aby se například znak 'Ch' Angličanovi zařadil jako 'C' atd. Pokud je řazení v kódu .NET tak se toto děje automaticky, ale pokud jde o řazení v SQL Serveru, tak zde se řadí podle Collation nastavené v databázi, případně u sloupce. Protože neexistuje nic jako "nastavit collation pro connection", je nutné collaction změnit přímo v dotaze např. takto:
SELECT *
FROM Osoba
ORDER BY Prijmeni Collate Czech_CI_AS_WS
SELECT *
FROM Osoba
ORDER BY Prijmeni Collate SQL_Latin1_General_CP1_CI_AS
To má nevýhodu dále v tom, že Collate nejde naplnit z proměnné. Uměl bych si představit, že např. ve Stored Procedure sestavíme dotaz, doplníme k němu ORDER BY s Collate, kterou získáme podle nějaké převodní tabulky z Kultury, a celý dotaz spustíme přes sp_executesql. Jak toto ale řešit v aplikaci, která je postavená nad Entity Frameworkem? Tam asi nemáme šanci změnit ORDER BY ve vygenerovaném dotazu.
|