データが失われる可能性があるため、値を変換できませんでした[終了]


12

まず、これが重複した質問ではなく、その問題の潜在的な重複でもないことを明確にすることから始めましょう。StackOverflowとDBA Stack Exchangeでこの問題の既存のすべてのバリアントに対するすべての答えを、運がなくても実装しようとしました。

私は過去2日間この問題に取り組んでおり(1日約7時間問題に取り組んでいます)、問題をグーグルで解決した後でも、他の誰も私の問題とまったく同じ変種を持っているようには見えません。

私は何をしようとしていますか?

SSISで、CSVファイルから読み取り、そこから行をOLE DBデータベースに挿入しようとしています。そのため、以下に示すように、私はこれまでで最も簡単なセットアップを行いました。

  1. Flat File Source -CSV行を読み取ります。
  2. Derived Column -現在は何もしません(実験のためだけにあります)。
  3. Data Conversion -現在は何もしません(実験のためだけにあります)。
  4. OLE DB Destination -データベースに行を格納します。

実行しようとすると、OLE DB宛先で実行が停止し、次のエラーメッセージが表示されます。

入力「OLE DB宛先入力」(51)の入力列「金額」(187)でエラーが発生しました。返された列のステータスは、「データが失われた可能性があるため、値を変換できませんでした。」でした。

失敗した列(Amount)は現在タイプDT_STRです。それが今一番信頼しているタイプのようです。

私は何を試しましたか?

  • Flat File Connection失敗している列で「推奨タイプ」関数を使用してみました。これにより、Single byte signed intデータ型が推奨されました。
    • で停止し、私のフラットファイルソース
    • エラーは、データ変換が失敗したことです。列「金額」のデータ変換は、ステータス値2およびステータステキスト「データが失われる可能性があるため、値を変換できませんでした。」を返しました。
  • を使用しDerived Columnて列をにキャストしようとしましたDT_I4
    • で停止し、私の派生列
    • エラーは、データ変換が失敗したことです。列「金額」のデータ変換は、ステータス値2およびステータステキスト「データが失われる可能性があるため、値を変換できませんでした。」を返しました。
  • を使用しData Conversionて列の値をにキャストしようとしましたDT_I4
    • 私で停止しますData Conversion
    • エラーは、データ変換が失敗したことです。列「金額」のデータ変換は、ステータス値2およびステータステキスト「データが失われる可能性があるため、値を変換できませんでした。」を返しました。
  • DT_STRソースと宛先の値の長さを変更してみました。
    • 設定に応じて、ソースまたは宛先で停止します。
  • 私の代わりに使用してExcelソース・コネクターを使用して接続しようとしたすることなく、IMEX=1接続文字列に追加します。運がありません。

私のプログラミング感覚は、私が台無しにされていることを教えてくれます。私は決してしているこれまで、このような単純なことのために、このような大きな問題が発生しました。

そして、なぜ私はデータの「潜在的な」損失を無視することができないのですか?控えめに言っても本当にイライラします。

私のシステム

これは、SQL Server 2008がインストールされたWindows Server 2008 R2マシンです。マシン自体は、Windows Updateによって完全に更新されます。


(Accessから取得したものの)値にこの問題があり、列をキャストするときに特定のコードページを使用する必要があったようです。私が何をしたかを確認するためにSSISパッケージにアクセスできなくなりました。

挿入しようとしている列のデータ型は何Amountですか?
Jon of All Trades 2013

2
CSVのフラットファイル接続マネージャーを開きます。[詳細]タブに移動し、Amount列を選択します。スクリーンショットを撮って、この写真で質問を更新してください。
billinkc 2013

Connection Managerを確認する機会はありましたか?
billinkc 2013

1
私はあなたがねじ込まれているとは思いませんが、接続マネージャーの定義を見なければ、言うことは不可能です。
billinkc 2013

回答:


3

これに何度か遭遇しましたが、問題はエクスポート/インポートパラメータのデータ型の不一致でした。まず最初に、ソースまたは宛先を右クリックし、[詳細エディター]を選択して、これらのパラメーターを確認します。[入力と出力のプロパティ]に移動し、すべてのアイテム(外部、出力、入力の両方)についてその列のデータ型を確認します。私は通常、ここで差異を見てきました。多くの場合、1つはUnicode(WSTR)で、もう1つはI4またはDSTRです。


7

エラーを無視する

まず、フラットファイルソース、エラー出力に移動し、[切り捨て]の[失敗コンポーネント]を[エラーを無視]に変更することで、文字列の切り捨てを無視できるはずです。

より良いソリューション

本当の問題は、SSISパイプライン内の文字列の長さが、以前のある時点で初期化されたためにまだ間違っていることである可能性があります。

フラットファイルソースから(または派生列/データ変換の後に)緑の矢印をダブルクリックし、[メタデータ]を選択することで、それが当てはまるかどうかを判断できます。パイプライン内のフィールドの長さがわかります。

メタデータがソースコンポーネントと一致しないことがよくある場合は、主にウィザードを介してフラットファイルソースとそれに対応する接続​​を作成する場合。

接続とフラットファイルソースを削除して再作成することをお勧めします。ソースコンポーネントとパイプラインメタデータを再同期する方法が見つからなかったためです。


2
ただし、これは「切り捨て」には該当しません。私はすでにそれを試しました。
Mathias Lykkegaard Lorenzen 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.