- PR -

ODBC接続での固定長列エラー

1
投稿者投稿内容
ともこ
大ベテラン
会議室デビュー日: 2007/09/14
投稿数: 111
投稿日時: 2007-10-16 15:06
いつもお世話になります。

現在、SQLサーバー2000に対してAS/400を参照するリンクサーバーを設定しています。(下記@参照)
そしてクエリアナライザにて下記AのSQL文を実行したところ、「全角かな」フィールドの値が取得できず、
以下のようなエラーが表示されてしまいます。

どなたか対応方法をご存知の方はアドバイスをお願いします。

■エラーメッセージ
 サーバー : メッセージ 7347、レベル 16、状態 1、行 1
 OLE DB プロバイダ 'MSDASQL' は固定長列 '[リンクサーバー名].[カタログ名].[スキーマ名].[テーブル名].フィールド名' に予期しない長さのデータを返しました。
 期待するデータ長は 32 ですが、返されたデータ長は 30 です。
 OLE DB エラー トレース [Non-interface error: Unexpected data length returned for the column: ProviderName='MSDASQL',
 TableName='[リンクサーバー名].[カタログ名].[スキーマ名].[テーブル名]', ColumnName='フィールド名', ExpectedLength='32', ReturnedLength='30']。

@リンクサーバーの設定
 ・リンクサーバー名 : AS400
 ・プロバイダ名 : Microsoft OLE DB Provaider for ODBC Driver
 ・製品名 : AS400
 ・データソース : S1023548 ・・・システムDSNにて「i Series Access for Windows ODBCデータソース」にて設定済み
 ・プロバイダ文字列 : MSDASQL

ASQL文
 SELECT *
FROM 'リンクサーバー名'.'カタログ名'.'スキーマ名'.'テーブル名'
こあら
大ベテラン
会議室デビュー日: 2007/06/26
投稿数: 157
投稿日時: 2007-10-16 15:46
以下参考まで。

[SNA] DBCS 文字の DB2/400 テーブルをリンクサーバーで SELECT すると失敗する

どこかのサイトで「SISOが原因なので全角フィールドをtrimすると回避できた」
というのも見た気もしますが・・・すみません。はっきりと思い出せません。
どらねこ
会議室デビュー日: 2006/11/29
投稿数: 6
投稿日時: 2007-10-16 16:02
似たような内容でしたので、参考までに…。

リンクサーバーで文字化け

[ メッセージ編集済み 編集者: どらねこ 編集日時 2007-10-16 16:04 ]
こあら
大ベテラン
会議室デビュー日: 2007/06/26
投稿数: 157
投稿日時: 2007-10-16 16:30
こっちの方が近いかな?
FIX: SQL Server 2000 でのリンク サーバー上のクエリを実行しようとすると、エラー メッセージ

ちなみにこれで検索しました。
http://search.msdn.microsoft.com/search/Default.aspx?brand=msdn&query=7347


ともこ
大ベテラン
会議室デビュー日: 2007/09/14
投稿数: 111
投稿日時: 2007-10-16 16:44
こあらさん、どらねこさん、ご回答ありがとうございます!

SISO対応でTRIMを使用するのは少し強引な気がして悩んでいました。
先ほどこあらさんが教えてくださったサイトでは、サポートパッケージと修正パッチの適用(http://support.microsoft.com/kb/920930/ja)
で解決できそうと書かれていました。
現時点ではこの対応しか無さそうなのでちょっと試してみようかと考えています。(最近リリースされたばかりのパッチなので不安ですが...)

お二人ともご丁寧な対応ありがとうございます、対応結果は追って追記させていただきます。
ともこ
大ベテラン
会議室デビュー日: 2007/09/14
投稿数: 111
投稿日時: 2007-10-16 17:04
度々すみません、
「FIX: SQL Server 2000 でのリンク サーバー上のクエリを実行しようとすると、エラー メッセージ(http://support.microsoft.com/kb/920930/ja)」のサイトに、
回避策
この問題を回避するために、クエリに OPTIONS(HASH JOIN)クエリ ヒントが追加できます。
とありました。
簡単に「HASH JOIN」について調べてみたのですがいまいちよく理解できません。「HASH JOIN」とは結合オプションですよね?私のSELECT文では結合は使用しないので関係ないのでしょうか?
ともこ
大ベテラン
会議室デビュー日: 2007/09/14
投稿数: 111
投稿日時: 2007-11-27 00:33
自己レスです。

先ほど「SQL Server 2000の修正プログラム(920930)を適用したのですが、
依然として固定長エラーが表示されてしまいます。
 参照:http://support.microsoft.com/kb/920930/ja
やはりTRIMを使うしかないのでしょうか?
明日マイクロソフトにも質問してみようと思います。
どなたか同じ現象を解決できた人はおられないでしょうか?
1

スキルアップ/キャリアアップ(JOB@IT)