私が知っている、私は驚かないで質問に書いたもので知っています。しかし、私の状況は継承されたPOSシステムでゆっくりと働いており、前任者はJOINに気付いていなかったので、60秒間ロードされる内部ページの1つを調べたとき、これらの8つのクエリを1つとして書き換えますJOINを使用した状況。問題は、JOINを知らないことに加えて、彼は複数のデータベースと驚きのためのフェチを持っていたように見えることです。驚き、彼らは異なる照合を使用します。問題の事実は、英語を話す人々がアルファベット全体を考慮するすべての「通常の」ラテン文字を使用することであり、この全体は数か月で使用できなくなるため、絆創膏で十分です。
要するに、2つのデータベースの2つのフィールドを比較できるように、単一の照合にキャストする何らかの方法が必要です。
正確なエラー:
等しい操作で「SQL_Latin1_General_CP850_CI_AI」と「SQL_Latin1_General_CP1_CI_AS」の間の照合の競合を解決できません。
クエリでcollate句を使用できます(今のところ私の例を見つけることができないので、おそらく構文が間違っています-それが正しい方向を指し示していることを望みます)
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
汎用的な方法は、照合を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