5

ストアドプロシージャのCOLLATIONを、そのプロシージャのテーブルの個々の列ではなく、データベースのデフォルトとして設定するにはどうすればよいですか。

Cannot resolve the collation conflict between “SQL_Latin1_General_Pref_CP1_CI_AS” and “Latin1_General_CI_AS” in the equal to operation

データベースサーバーの照合がデータベースの照合と異なるため、照合の競合エラーが発生します。手順は膨大で、どのテーブル列の競合が発生しているかわかりません。

そのプロシージャのすべての列が同じ照合を持つように、ストアドプロシージャに照合を割り当てることさえ可能ですか?

4

1 に答える 1

6

まず、照合は、テキストデータがテーブル内にどのように格納されるかに関するものであり、ストアドプロシージャレベルではありません。

照合の問題は、テキストの照合が同じように保存されていないソースからのテキストデータを比較するときに発生します。(テキストのデータ型については話していません。文字列データだけです)

句またはテーブルが結合するTSQLを確認してください。これは、テキストの比較が行われる最も一般的な場所です。比較領域の横にある照合機能を使用して、データベースのデフォルトに照合できます。例えば

SELECT
c.CustomerID
FROM
dbo.Customer c
INNER JOIN dbo.CustomerLog cl on c.CustomerName = cl.LogEntry collate     
database_default

状況によってはこれが不可能な場合もありますが、私は常にこれらのルールに従います。
-インストール時に正しいサーバーのデフォルトの照合を選択して、照合の下にtempdbが作成されるようにします。一時テーブルを作成すると、これらはtempdbに作成されます
-テーブルを作成するときは、特別な理由がない限り、照合を指定しません。

于 2013-01-08T22:57:16.333 に答える