web-dev-qa-db-ja.com

SQL Server 2008で切り捨てた後、一括挿入で主キーが重複していますか?

SSISを使用してSQL Server 2008の製品データベースからフラットファイルにデータをダンプし、一括挿入を使用してそれらのフラットファイルをSQL Server 2008開発データベースにロードしています。 SSISパッケージは一括挿入の前にTRUNCATE TABLEステートメントを実行していますが、実行すると、「ステートメントが終了しました。PRIMARYKEY制約の違反。重複キーを挿入できません。」というエラーが表示されます。なぜ切り捨てた後に重複キーがあるのですか?一括挿入の前に主キーをクリアするために必要なことは他にありますか?

3
stomcavage

テーブルを切り詰めた場合、主キー違反はファイル内の重複データが原因である必要があります。 PK制約なしで新しいテーブルに一括挿入してから、テーブルの重複を確認します(ファイルを直接解析するためのツールやスクリプトを書くよりもおそらく簡単です)。この方法で制約のない模倣テーブルを作成できます。

SELECT * INTO dbo.new_bulk_source
  FROM dbo.old_source
  WHERE 1 = 0;

次に、このテーブルを参照するようにパッケージを変更し、挿入を実行してから、次のコマンドを実行します。

SELECT key FROM dbo.new_bulk_source
  GROUP BY key
  HAVING COUNT(*) > 1;

ドーナツの呼び出しは家の中から来ていると思います(または、切り捨てが成功していません)。

5
Aaron Bertrand