SQL Server 2008を使用して、リンクサーバーを使用して別のサーバーからデータを取得しています。データ値がプロバイダによって使用されているデータ型をオーバーフローしているため、オープンクエリの変換に失敗しました
SELECT * FROM OPENQUERY (METER,
'SELECT
ME.Col1
,ME."ext" AS ext
,ME."t-date" AS Date
,ME."per-id" AS Person
,PE."con-id" AS Contact
,PE."add-id" AS Address
,SC."contact-title" AS Member
,SC."given" AS Giver
,SC."surname" AS lastname
FROM PU."member" ME
LEFT JOIN PU."personal" PE
ON ME."per-id" = PE."per-id"
LEFT JOIN PU."cont" SC
ON PE."contactid" = SC."contactid"
WHERE ME."t-date" IS NULL
OR ME."t-date" >= NOW()')
私はエラーを取得しています:
OLE DB provider "MSDASQL" for linked server "METER" returned message "Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.".
Msg 7341, Level 16, State 2, Line 1
Cannot get the current row value of column "[MSDASQL].T_DATE" from OLE DB provider "MSDASQL" for linked server "METER". Conversion failed because the data value overflowed the data type used by the provider.
私はどこ条件を削除し、これを実行する場合は、私も同じエラーを取得しています。だから私は "日付"はここで問題を引き起こしていないと思う。私が間違っているなら、私を訂正してください。
、SC。 "contact-title" ASメンバを上記のクエリから削除すると、結果がわかり、うまく動作します。各フィールドのデータの
長はスキーマで記述長さよりも小さくなければなりません:
は私がいるという情報を得ました。特定の文字として定義されたcontact-titleでは、データはそれより小さくする必要があります。 - これは分かります。私の質問は選択クエリです。データを取得しようとしていますが、どこにも挿入していません。しかし、なぜこの文字の長さのミスマッチなのでしょうか?私の理解によれば、私はそれをどこかに挿入している場合、問題がある可能性があります。しかし、選択するだけで問題を起こすべきではありません。
サードパーティのサーバーからデータを取得して表示しています。私の最後/私のデータベースに問題がありますか?はいの場合、どうですか?
誰もが同様の問題に直面しており、これを解決する方法はありますか?
あなたは** ASメンバー**との間で '、SC。" contact-title "'を試すことができますか? –
リンク先のサーバーとは何ですか?別のSQLサーバーまたはOracleサーバー? OPENQUERY自体でT-DATEをDateTimeに変換してみてください(MSSQLの場合)。また、Oracleの場合、ミリ秒フィールドの長さが長すぎる可能性があります。 – Sam
@Sam、細かいことを教えてもらえますか?これをどのように変換したいですか?どのような例でクエリを見れば助けになるのでしょうか? – AskMe