2017-07-14 31 views
0

SQL Server Expressを使用していて、インポートウィザードを使用してインポートしていますので、実際に提供するコードはありません。SQL Server:重複している主キーエラー

エラーがここに示されています:

エラー0xc0202009:データフロータスク1:SSISエラーコードDTS_E_OLEDBERROR。
OLE DBエラーが発生しました。エラーコード:0x80004005。
OLE DBレコードが利用可能です。ソース: "Microsoft SQL Serverネイティブクライアント11.0" Hresult:0x80004005説明: "ステートメントが終了しました。"

OLE DBレコードが利用可能です。
出典: "Microsoft SQL Serverのネイティブクライアント11.0"
HRESULT:0x80004005の
説明:「PRIMARY KEY制約の違反 'PK_CXS' オブジェクト 'dbo.cxs' 内の重複するキーを挿入できません重複するキー値がある(00。 、00、000000、2017、03、01、00000000、0)

私はこれまでの値でフィルターをかけてExcelでテストを行っています。 1行だけが表示されます。私は主キーを表す8つの列を連結し、重複を探します。何も見つかりません。次に、Notepad ++でTextFXツールを使用して、重複を削除しようとしましたが、重複は見つかりませんでした。

一見したことでない重複を見つけるための他の方法はありますか?

+1

データベースに既に存在するレコードはどうですか?テーブルに存在する主キーをインポートしようとすると、エラーが発生します。 – Eric

+0

すべてのインポートエラーの前に、dbo.XXXからの削除を使用してすべてのレコードを削除します。それで十分ですか、それともさらに進む必要がありますか? –

+0

こんにちは、ティム、それはPK_CXSが複数のものを持つ複合主キーであるように見えます、それらを一緒にチェックしていますか?また、キーが自動生成されているかどうかを確認します。 p.s.巨大なコンポジットプライマリはここで私によく見えません。プライマリキーをIDカラムに切り替えると、より簡単に生活ができます。 – Chengzhi

答えて

0

いくつかの提案(実際には完全な答えではなく、与えられたデータを使って、私が行える限り)です。いくつかの場面で

、あなたは、あなたのテキストファイルで異なるている(例えば1.000000001と1.000000002など)、テキストなどのデータを持っていますが、同じは一度丸め、なぜなら切り捨てにより、その先の型に変換になることがありまたは他の種類の変換効果。これは、テキストファイルで重複を見つけることができないにも関わらず、データベースがそれらを見つける理由です。

あなたが使用してチェックすることができますいくつかのテクニックがあります。

  1. は別にインポートしたデータから... すでにターゲット表上の任意の以前のデータはありますか?その場合は、重複の可能性のあるソースがあります。

  2. これは問題のあるものを見つけることができますように、すべての「行ごと」をインポートする方法(またはバッチで)を持っていますか?

前の選択肢のどれも可能でない場合は、このプロセスに従うことができます:

  • あなたターゲット 1が、と同じ構造を持つテーブルを作成せずに任意のPRIMARY KEYUNIQUE制約。さんはload_table

  • は、この表にデータをインポートし、それを呼ぶことにしましょう。 PRIMARY KEYという制約がないため、苦情を言わないでください。

  • が重複を見つけるために次のクエリを実行します。

    SELECT 
        k1, k2, k3 ... kn 
    FROM 
        load_table 
    GROUP BY 
        k1, k2, k3 ... kn 
    HAVING 
        count(*) > 1 
    

    ​​、k2k3を... knはあなたターゲットテーブルの主キーを含むであろうすべての列です。

これらの手法を使用すると、SQL Serverで検出された重複が見つかりましたが、これまで使用していた方法を逃すことになります。

+0

私は1から393,190行をインポートしようとして、それが動作するかどうかを確認します。インポートは393,192の394,910で終了します –

+0

私はあなたの提案を使用しました。元のデータソースには27の列があり、27の列にまたがる複製は事実上不可能です。だから、8つの列(主キー)でカットしてから、主キーのないロードテーブルを作成してください。これは成功しました。どうもありがとう。 –

+0

助けてくれてうれしいです。 – joanolo