【SQL ServerからOracleへのリンクサーバー】列’xxx’に必要なデータ長に一致しないデータが返されました。必要な (最大) データ長は xxですが、返されたデータ長は xx です。
SQL ServerからOracleへのリンクサーバーを設定している状態で、例えば以下のSQLを実行すると次のエラーが出る。
select * from openquery(edpstv, 'select ''有'' as 有無 from BSS.契約 ')
リンク サーバー 'edpstv' の OLE DB プロバイダー 'OraOLEDB.Oracle' から、列 '[OraOLEDB.Oracle].有無' に必要なデータ長に一致しないデータが返されました。必要な (最大) データ長は 4 ですが、返されたデータ長は 2 です。
はっ? 何のこと・・・
ネットを漁ると、「Microsoft OLE DB Provider for ORACLE」に変更したらうまく行ったという記述があったが、これは廃止になるものなので基本的には使用してはいけない。
Microsoft OLE DB Provider for Oracle の概要
https://docs.microsoft.com/ja-jp/sql/ado/guide/appendixes/microsoft-ole-db-provider-for-oracle?view=sql-server-ver15
型を指定していないのがいけないのかと思い、次のように型を指定してあげたらうまく行った。
select * from openquery(edpstv, 'select cast(''有'' as varchar(2)) from BSS.契約 ')
でもやっぱり謎だなぁ・・・