SQLからOracleサーバーへのリンクサーバーでwhere句の条件を変えるとなぜか結合する際のキーが一致しなくなる
SQL ServerからOracleをリンクサーバーにしてアクセスしているのだが、またまた不思議なことがあった。
以下のようなSQLを書いたのだが、なぜかユーザー名が表示されない。もちろんデータもあるし、SQLも間違いない。
実際、Oracle上で試したが問題なかった。
select us.ユーザー名 from EDPSTV..BSS.契約TBL t left outer join EDPSTV..BSS.ユーザーTBL us on us.ユーザーID = t.ユーザーID where t.契約コード = 'S2019122011'
上記で、Whereを付けなくて、top(10)のように指定した結果セットでは、ちゃんとユーザー名が表示される。
おかしなことに契約コードを変えるとちゃんとユーザー名が表示されるユーザーもいる。
全くわからなかったがユーザーIDがchar(20)だったので、join条件を以下のようにしたらうまく行った。
left outer join EDPSTV..BSS.ユーザーTBL us on us.ユーザーID + ' ' = t.ユーザーID + ' '
半角の空白20文字をそれぞれのユーザーIDの末尾に付加している。
おそらくOleDB辺りがOracleにSQLを投げる際に変換しているのだと思うが、それが実際のユーザーIDの値によって揺れているってこと
なんかじゃないかと思う。
とうわけで、この調査に3時間もかかってしまった・・・