web-dev-qa-db-ja.com

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

これは重複する質問ではないであることを明確にすることから始めましょう。また、その問題の潜在的な重複もありません。 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データ型が推奨されました。
    • 停止 myフラットファイルソース.
    • エラーデータ変換に失敗しました。列「金額」のデータ変換は、ステータス値2およびステータステキスト「データが失われる可能性があるため、値を変換できませんでした。」を返しました。
  • Derived Columnを使用して列をDT_I4にキャストしようとしました。
    • 停止 my派生列.
    • エラーデータ変換に失敗しました。列「金額」のデータ変換は、ステータス値2およびステータステキスト「データが失われる可能性があるため、値を変換できませんでした。」を返しました。
  • Data Conversionを使用して列の値をDT_I4。にキャストしようとしました
    • 停止 my Data Conversion
    • エラーデータ変換に失敗しました。列「金額」のデータ変換は、ステータス値2およびステータステキスト「データが失われる可能性があるため、値を変換できませんでした。」を返しました。
  • ソースと宛先のDT_STR値の長さを変更しようとしました。
    • 停止位置設定に応じてソースまたは宛先。
  • 接続文字列にIMEX=1を追加せずに、およびを使用して、代わりにExcel Sourceコネクタを使用して接続してみました。運が悪い。

私のプログラミング感覚は、私が台無しにされていることを教えてくれます。私はこれまでeverのような単純なことでこのような大きな問題に遭遇したことはありません。

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

私のシステム

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

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

3
Mike

エラーを無視

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

より良い解決策

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

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

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

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

8
Oliver Rahner