2016-04-28 8 views
-1

別個の方法でデータベースにファイルをインポートするときに、SQLサーバの重複した行を削除する必要があります。DISTINCTを使用してSQLサーバの行から重複を削除

ホールグループはデータベース内の私のテーブルです。私はこの SQLプロシージャを使用しています:この手順を

SELECT DISTINCT * INTO tempdb.dbo.tmpTable 
FROM HallGroup 
DELETE FROM HallGroup 
INSERT INTO HallGroup SELECT * FROM tempdb.dbo.tmpTable 
DROP TABLE tempdb.dbo.tmpTable 

は細かい重複行が削除されて動作しますが、私はまだ複製されているSQLサーバーの行に再びデータをインポートしようとすると問題があります。私は何が欠けているので、任意のヒント?

別の方法でファイルをデータベースにインポートするときに、SQLサーバーの重複した行を正しく削除する方法はありますか。

+0

既にテーブルに入っているデータと重複していますか?インポート時にそのテーブルにリンクして、データを複製しないようにする必要があります –

+0

はい。インポート時にテーブルをリンクするには? – Paulius

+0

私はステージングテーブルを持ってデータをロードすることを考えています(毎回切り捨てます)。その後、結合で単純な挿入を行います –

答えて

0

私はちょっと外に出てからSQLに戻ってきましたが、私が信じているように(あなたがそのようにしている理由を完全に理解しているわけではありません)たとえそれが正しく機能していたとしても)時間の経過とともに、テーブルのサイズが増えるにつれてプロセスが実行されるたびに時間がかかります。

キーが存在しないことに基づいて新しいデータを挿入すると(すでにストアドプロシージャを使用していることを示していれば)はるかに効率的です。使用する鍵がない場合(最近私に起こった)、それを作成してください。私はちょうどあなたと同様の問題を解決しましたが、私は外部ソースからテーブルにデータをインポートしており、重複の可能性を排除したいと思っていました。私の場合、外部ソースデータファイルの名前(インポートするデータセットによって異なる)をインポートするデータと関連付けて、インポートしたデータを再インポートしないようにします。 dtsxを使用して外部データをテーブルにロードし、ストアドプロシージャを実行してそのデータを既存のテーブルとマージします。これにより、各レコードがどこから来たのかという監査証跡を持つという利点が得られます。

これが役に立ちます。

関連する問題