2

SQLServer2005と.Net2.0を実行しています。同じ列に複数の言語でデータを保存する必要のあるテーブルがいくつかあります。たとえば、ArticleID(ID)とArticleName(nvarchar 100)を含むArticleテーブル。ArticleNameのデータはさまざまな言語である可能性があります。

ほとんどのデータは英語であるため、私のデータベースはSQL_Latin1_General_CP1_CI_ASのデフォルトの照合を使用しています。

私のアプリケーションの各ユーザーは、自分の好みのカルチャを選択できます。ユーザーインターフェイスでは、記事データがデータグリッドに表示され、ユーザーは記事名で並べ替えることができます。

現在、データベースの照合が原因で、並べ替え順序が正しくありません。ORDER BY...COLLATE句を使用してこれを修正することを考えています。しかし、正しいユーザーカルチャをSQL Server照合にマップするにはどうすればよいですか?このように、文化ごとに指定する必要がありますか?たとえば。カルチャ=zh-CN(Chinese PRC)の場合、照合Chinese_PRC_CI_ASなどを使用します...

照合を取得するためのより良い方法はありますか?私のアプローチは正しいですか?または、これを処理するためのより良い方法はありますか?(実際に.Netでソートを実行することを考えましたが、それはCPU時間の無駄のようです。)読んでくれてありがとう。

4

1 に答える 1

2

SQL Server 2005には、サポートされているすべての照合を返すfn_helpcollat​​ions()テーブル関数があります。

select *, 
COLLATIONPROPERTY(name, 'CodePage') as CodePage,
COLLATIONPROPERTY(name, 'LCID') as LCID,
COLLATIONPROPERTY(name, 'ComparisonStyle') as ComparisonStyle,
COLLATIONPROPERTY(name, 'Version') as Version
from fn_helpcollations()

このMSDNの記事では、SQLServerの照合について詳しく説明しています。

ただし、LCIDと照合の間に直接のマッピングがないため、LCIDから正しい照合を判別することはできません。

これは、ロケールIDに基づいて、ユーザーに最適な並べ替え順序を自動的に割り当てられるようにする場合に不便です。

SQL照合をユーザーがサポートする言語にマッピングするカスタムテーブルを作成し、このマッピングテーブルからユーザーの照合を取得して、意図したとおりにORDERBYCOLLATEを使用することをお勧めします。

于 2009-07-18T10:19:52.700 に答える