trapemiyaの日記

hatenablogが新しくなったんで新規一転また2019年1月からちょこちょこ書いてます。C#中心のプログラミングに関するお話です。

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辺りがOracleSQLを投げる際に変換しているのだと思うが、それが実際のユーザーIDの値によって揺れているってこと
なんかじゃないかと思う。
とうわけで、この調査に3時間もかかってしまった・・・