私は以下を含む機能を持っています:
SELECT @pString = CAST(@pString AS VARCHAR(255)) COLLATE SQL_Latin1_General_Cp1251_CS_AS
これは、たとえば、フランス語のアクセントを削除するのに役立ちます。例えば:
UPPER(CAST('Éléctricité' AS VARCHAR(255)) COLLATE SQL_Latin1_General_Cp1251_CS_AS)
を与えELECTRICITE
ます。
しかし、使用COLLATE
すると関数が非決定論的になるため、列の計算された永続値として使用できません。
Q1. 決定論的関数を使用して、このようなアクセントを削除する別の (迅速かつ簡単な) 方法はありますか?
Q2. (おまけの質問) この計算された永続列を使用する理由は、検索するためです。たとえば、ユーザーが顧客の姓を 'Gagne' または 'Gagné' または 'GAGNE' または 'GAGNÉ' として入力すると、アプリは永続化された計算列を使用してそれを検索します。これを行うより良い方法はありますか?
編集: SQL Server 2012 と SQL-Azure を使用します。