1

私はSQL Server 2012と、asp.net mvc多言語アプリケーションのバックエンドを使用しています。

フロントエンドを強化するデータベースの照合を「sql_latin1_general_cp1_ci_as」に設定しました。

このデータベースには、英語、ロシア語、アラビア語などのデータが格納されるため、データにアクセスするストアド プロシージャには where 句、order by 句などがあるため、照合の問題が発生します。

言語用のデータにアクセスする一連のストアド プロシージャがあります。私の問題を回避する方法として、オプションを探しています。

データのセットごとにビューを作成し、これに照合を指定することを考えていました。さまざまな言語でクエリを実行するシナリオはありません。または、ストアド プロシージャで照合を指定することもできますが、これは、ストアド プロシージャが照合ごとに異なることを意味します。

ここで照合がどのように挑戦するかについての提案やアイデアはありますか?

4

3 に答える 3

0

これはあなたに役立つ可能性があります-

SELECT DATABASEPROPERTYEX('<your_db>', 'collation')

SELECT * 
FROM dbo.table1 t
ORDER BY string_column COLLATE database_default -- i.e. sql_latin1_general_cp1_ci_as
于 2013-05-07T06:03:38.953 に答える
0

まず、すべての列を にする必要があります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...

次に、クエリに使用する適切なビューを選択するだけです。

于 2013-05-07T03:57:04.017 に答える