こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

照合順序の競合を解決できません[SQL Server2005 ]

今あるビューを生成しようとしてSQL文がうまく書けずに悩んでいます。ビューですが、副問い合わせを使用してある条件毎に異なるテーブルからデータを取得しようとして下記のようなSQLを書きました。

【SQL】
SELECT url, site_id, element1, element2, element3, element4, element5, element6, access_date,
CASE element2 WHEN '1' THEN ''
WHEN '2' THEN
(SELECT title FROM table_b b WHERE b.site_id = a.site_id AND id = a.element4)
WHEN '3' THEN
(SELECT title FROM table_c c WHERE c.site_id = a.site_id AND id = a.element4)
END AS page_title
FROM dbo.view_access_log AS a

このSQLを実行すると、「eqaul to の操作の"Japanese_CI_AS"と"Japanese_CS_AS_KS_WS"間での照合順序の競合を解決できません。」というエラーが表示されてしまいます。

ちなみに、上記SQLの
"WHEN '3' THEN
(SELECT title FROM table_c c
WHERE c.site_id = a.site_id AND id = a.element4) "という部分を削除すると正常に動作します。

また、
・view_access_log,table_b,table_c の照合順序は「Japanese_CI_AS」となっています。
・副問い合わせに使用しているtable_b、table_cのidというフィールドはそれぞれint型になっています。
・a.element4のフィールドの参照元のフィールドはvarchar(200)になっています。

どなたか識者の方、アドバイスお願い致します。m(__)m

投稿日時 - 2009-08-31 18:52:18

QNo.5251984

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.2

・データベースのデフォルト照合順序
・table_bのtitle列の照合順序
・table_cのtitle列の照合順序
をチェックしてみてください。

照合順序の問題はintでは起こりませんので、結合の方でないなら、CASE内の戻り値の照合順序の競合の可能性が高いです。

投稿日時 - 2009-09-01 11:09:51

ANo.1

これだけだとどのテーブルがJapanese_CS_AS_KS_WSで、どのクエリ上は照合順序を採用したいのか、
なぜintとvarcharをそのままキーにして繋いでいるのかなど、詳細が不明なので、ヒントだけ。

照合順序は強制的に変更できます。例えば以下のように。
ここに指定するのが適当かまでは読み切れませんので、実態に応じて試して頂くのがいいと思います。

WHEN '3' THEN
(SELECT title FROM table_c c WHERE c.site_id = a.site_id AND id = a.element4 COLLATE Japanese_CI_AS)

投稿日時 - 2009-08-31 19:08:43

補足

今確認してみたのですが、照合順序がJapanese_CS_AS_KS_WSになっているテーブルはありませんでした。

副問い合わせの部分を
【パターン1】
SELECT title FROM table_c WHERE c.site_id = a.site_id AND id = CAST(a.element4 AS int) COLLATE Japanese_CI_AS
【パターン2】
SELECT title FROM table_c WHERE c.site_id = a.site_id AND id = a.element4 COLLATE Japanese_CI_AS
という2つの方法でやってみたのですが、エラーは変わりませんでした。

投稿日時 - 2009-08-31 23:35:36

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-