63

私は知っています、私は私が質問に書いたことで私が驚かないはずです。しかし、私の状況は継承されたPOSシステムでゆっくりと機能しており、前任者は明らかにJOINを認識していなかったため、60秒間読み込まれる内部ページのいずれかを調べたところ、かなり速いことがわかりました。これらの8つのクエリを1つに書き直してください。 JOINの状況でクエリを実行します。問題は、JOINについて知らないことに加えて、彼は複数のデータベースに対するフェチを持っていたようであり、驚いたことに、それらが異なる照合を使用していることです。問題の事実は、英語を話す人々がアルファベット全体と見なすすべての「通常の」ラテン文字を使用することです。このすべてが数か月で使用されなくなるため、必要なのはバンデードだけです。

簡単に言うと、2つのデータベースの2つのフィールドを比較できるように、1つの照合にキャストするための何らかの方法が必要です。

正確なエラーは次のとおりです。

「SQL_Latin1_General_CP850_CI_AI」と「SQL_Latin1_General_CP1_CI_AS」の間の照合の競合をequal操作で解決できません。

4

2 に答える 2

129

クエリでcollat​​e句を使用できます(現在、例が見つからないため、構文が間違っている可能性があります。正しい方向を示していると思います)

select sone_field collate SQL_Latin1_General_CP850_CI_AI
  from table_1
    inner join table_2
      on (table_1.field collate SQL_Latin1_General_CP850_CI_AI = table_2.field)
  where whatever
于 2010-02-18T17:39:45.860 に答える
65

汎用的な方法は、照合をDATABASE_DEFAULTに強制することです。これにより、変更される可能性のある照合名のハードコーディングが削除されます。

また、一時テーブルとテーブル変数、およびサーバーの照合がわからない場合(たとえば、システムを顧客のサーバーに配置しているベンダーの場合)にも役立ちます。

select
    sone_field collate DATABASE_DEFAULT
from
    table_1
    inner join
    table_2 on table_1.field collate DATABASE_DEFAULT = table_2.field
where whatever
于 2010-02-18T18:26:20.290 に答える