51

Excel ファイルから SQL Server データベースにデータをインポートしようとしています。ログ ファイルに次のエラーが記録されているため、これを行うことができません。助けてください。ログ エラーは次のとおりです。

[OLE DB 宛先 [42]] エラー: OLE DB エラーが発生しました。エラー コード: 0x80040E21。OLE DB レコードが利用可能です。ソース: "Microsoft SQL Native Client" Hresult: 0x80040E21 説明: "複数ステップの OLE DB 操作でエラーが発生しました。利用可能な場合は、各 OLE DB ステータス値を確認してください。作業は行われませんでした。".

[OLE DB 宛先 [42]] エラー: 入力 "OLE DB 宛先入力" (55) の入力列 "F2 のコピー" (5164) でエラーが発生しました。返された列のステータスは、「値が列の整合性制約に違反しました。」でした。

[OLE DB Destination [42]] エラー: エラー コード 0xC020907D が発生したため、「input "OLE DB Destination Input" (55)」が失敗し、「input "OLE DB Destination Input" (55)」のエラー行の配置でエラーが指定されましたエラーで。指定されたコンポーネントの指定されたオブジェクトでエラーが発生しました。

[DTS.Pipeline] エラー: コンポーネント "OLE DB Destination" (42) の ProcessInput メソッドがエラー コード 0xC0209029 で失敗しました。識別されたコンポーネントが ProcessInput メソッドからエラーを返しました。エラーはコンポーネントに固有のものですが、エラーは致命的であり、データ フロー タスクの実行が停止します。

[DTS.Pipeline] エラー: スレッド "WorkThread0" がエラー コード 0xC0209029 で終了しました。

[Excel ソース [174]] エラー: データ フロー タスク バッファーに行を追加しようとして、エラー コード 0xC0047020 で失敗しました。

[DTS.Pipeline] エラー: コンポーネント "Excel ソース" (174) の PrimeOutput メソッドがエラー コード 0xC02020C4 を返しました。パイプライン エンジンが PrimeOutput() を呼び出したときに、コンポーネントがエラー コードを返しました。エラー コードの意味はコンポーネントによって定義されますが、エラーは致命的であり、パイプラインは実行を停止しました。

4

8 に答える 8

34

データの最後の行の後に Excel から空の行を削除してください!

Excel の空の行がまだデータと見なされる場合があるため、1 つ以上の null 非許容列を含むテーブルにそれらをインポートしようとすると、列の制約に違反します。

解決策:シートの空の行をすべて選択し、データの最後の行の後の行も含めて、[行の削除] をクリックします。

明らかに、データの一部が実際にテーブルの制約に違反している場合は、データベースのルールに一致するようにデータを修正してください..

于 2016-01-29T09:15:55.843 に答える
7

列「F2のコピー」の「値が列の整合性制約に違反しました」というエラーメッセージが表示されます

対象テーブルの値に違反しないようにしてください。許容値、データ型などは質問に記載されていないため、より具体的に回答することはできません。

反対票に対処するには、いいえ、実際にはそのとおりです。許可されていないものを列に入れています。Faizanが NULL を NOT NULLable 列に入れていることを指摘している可能性がありますが、それは他の多くのものである可能性があり、元のポスターは更新を提供していないため、推測することはできません. 挿入が違反した外部キ​​ー制約はありましたか? たぶん、吹き飛ばされたチェック制約がありますか?Excel のソース列に、Excel の有効な日付値が含まれている可能性がありますが、ターゲット列の日付/時刻データ型には無効です。

したがって、具体的な情報をむき出しにすると、「それを壊すようなことはしないでください」というのが最善の答えです。テーブルの定義、提供された値などを提供してください具体的な回答が可能です。

NOT NULLable 列を NULLable 列にするよう人々に伝えるのが正しい答えかもしれません。それはまた、人類に知られている最も恐ろしい答えかもしれません. 既存のプロセスが「F2 のコピー」列に常に値があることを期待している場合、制約を NULL に変更すると、既存のクエリが混乱する可能性があります。例えば

SELECT * FROM ArbitraryTable AS T WHERE T.[Copy of F2] = '';

Copy of F2現在、そのクエリは、不適切な名前のステータス インジケーターであるため、新たにインポートされたものをすべて取得します。請求書の支払いができるように、そのデータを次のシステムにフィードする必要があります。未処理の行が NULL 値を持つことができるようにするとすぐに、上記のクエリはそれを満たさなくなります。請求書は支払われず、コレクションはあなたの建物をレポし、今あなたは職を失っています。すべては、影響分析を行っていないためです。

于 2013-10-02T21:54:55.683 に答える
1

Teradata テーブルまたはビューは、NULL を「?」として格納します。SQL はそれを文字または文字列と見なします。これが、 「値が列の整合性制約に違反しました」というエラーの主な理由です。データが Teradata ソースから SQL 宛先に移植されるとき。解決策 1: 宛先テーブルが NULL を保持できるようにする 解決策 2: '?' を変換する 宛先テーブルに何らかの値として格納される文字。

于 2016-08-17T13:06:04.247 に答える