2016-09-24 8 views
0

私は8000〜10000の行を持つExcelファイルを持っています。これをC#のxmlに変換し、それをストアドプロシージャに渡してテーブルに挿入します。重複行を無視/キャプチャしている間にバルクデータを挿入する

データベースに既に存在するエントリがある場合は、データを挿入している間は、挿入を破ることなく残りの行を挿入しながら無視したい。

私が考えている解決策の1つは、テーブルに挿入トリガーを作成して、その行がすでにテーブルに存在するかどうかをチェックすることですが、この方法は10,000行で非常にコストがかかります。

他にどんな方法がありますか? - 発見

with p as (<your pivot here>) 
    insert into Expenses (. . .) 
     select p.* 
     from p 
     where not exists (select 1 
          from Expenses e 
          where e.entry = p.entry 
         ); 

これはあなたの特定のケースのためにいい作品:以下は、短手コード

SELECT @sql = N' 
    INSERT INTO Expenses ('+ STUFF(@col,1,1,'') +') 
    SELECT ' + STUFF(@col,1,1,'') + ' 
    FROM #TEMPTABLE t 
    PIVOT (
     MAX([Value]) FOR AttributeName IN (' + STUFF(@col,1,1,'')+') 
    ) as pvt' 

    EXEC (@sql) 

答えて

1

は、あなたがテーブルに既にだけ重複したエントリを懸念している場合、あなたはこのような何かを行うことができますですすでにテーブルに入っているエントリを避けてください。ただし、一時表内の重複は削除されません。また、既にExpensesにあるデータと新しいデータを結合しません。

あなたが本当にほしいと思うのは、mergeです。上記の方法で問題が解決しない場合は、に別のの質問をしてください。この質問は、mergeソリューションの外観を説明するのに十分な情報を提供していません。他の質問には、サンプルデータと望ましい結果があります。

+0

私は、tempテーブルから重複したデータを削除しないでいいです。私が望むのは、重複したデータをどこか別々にキャプチャしてユーザに戻すことだけです。あなたのソリューションは重複しないデータの挿入に役立ちますが、重複した行を保存するにはどうしたらいいですか? – user728630

+0

@ user728630。 。 。あなたの質問は「私は無視したい」です。これはこれがしていることです。他に何かしたい場合は、重複する行を見つけて返すクエリを作成します。 。 。別のステップとして。 –

関連する問題