2016-09-24 56 views
0

我有一個行數在8000到10000之間的excel文件。我將它轉換爲c#中的xml並將它傳遞給存儲過程以將其插入到表中。在sql server中插入批量數據,同時忽略/捕獲重複行

插入數據時,如果有一個條目已經存在於數據庫中我想忽略/捕獲它,而不插入其他行而不打破插入。

我認爲的一種解決方案是在表上創建一個插入觸發器來檢查該行是否已經存在於表中,但這種方法對於10,000行是非常昂貴的。

還有什麼辦法呢?下面是手短碼

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

如果你只關心表中已經重複的項目,你可以做這樣的事情:

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 
         ); 

這爲您的特定情況下工作好 - 調查已經在表格中並避免它們的條目。但是,它不會刪除臨時表中的重複項。此外,它不會將Expenses中已有的數據與新數據組合在一起。我想你真的想要merge。如果上述問題沒有解決您的問題,請詢問另一個問題。此問題未提供足夠的信息來解釋merge解決方案的外觀。另一個問題會有樣本數據和期望的結果。

+0

我很好,沒有從臨時表中刪除重複的數據。我想要的是將重複數據分別捕獲到某處,以將其傳回給用戶。您的解決方案可以幫助我插入非重複的數據,但我如何存儲重複的行? – user728630

+0

@ user728630。 。 。你的問題是「我想忽略」,這是這樣做的。如果你想做其他事情,那麼編寫一個查詢來查找重複的行並返回它們。 。 。作爲一個單獨的步驟。 –