2012-11-09 105 views
0

我有大約100列約10000行的表。 定期地,我將收到一個具有類似數據的Excel,現在我需要更新表格。 如果Excel中存在新行,我必須將它們添加到數據庫。 如果舊行已更新,我需要更新數據庫中的行。 如果某些行已被刪除,我需要從主表中刪除該行並添加到另一個表中。比較SQL數據庫中的記錄與Excel和更新數據庫相應

我曾經想過程序如下:

抓取所有行從數據庫到數據集。 將Excel中的所有行導入到DataSet中。 現在使用連接比較這2個數據集並執行所需的操作。

我從來沒有這種規模的數據工作,很擔心性能。讓我知道實現這一要求的理想方式。

在此先感謝。 :)

+0

你有沒有想過只是在做這一切在SQL?即導入excel文檔,然後更新您的表格,其中ID字段匹配等等,比編碼要容易 – MikeSmithDev

+0

您說要刪除所有不在Excel工作表中的記錄,更新Excel工作表中更改的所有記錄,然後插入Excel工作表中新增的所有記錄。如果你希望你的表在一天結束時看起來與Excel工作表完全相同,爲什麼不放棄所有的舊數據並用新的東西重新填充表格? –

+0

,因爲如果他的表在Excel工作表 – MikeSmithDev

回答

2

由於我的經驗說,它很簡單,如果你選擇做的東西在T-SQL如下:

  1. 您可以使用"OPENROWSET""OPENQUERY",鏈接se rvers,DTS和SQL Server中的許多其他功能將excel文件導入臨時表。
  2. 你可以寫一些簡單的查詢來做到這一點。如果你使用的是SQL 2008,那麼"MERGE"已經爲你的問題做了很好的準備。

另一件事是,其性能遠遠超過C#不同。您可以使用"TOP"子句將比較分塊並做許多其他事情。

希望它有幫助。 乾杯

+0

我想給用戶一個界面,所有這些操作都將自動完成,所以我不認爲第一個答案適用於我。無論如何,我會閱讀你的第一個建議,因爲除了dtswizard之外我不知道其他任何東西。任何指針從哪裏開始都會有所幫助。 不知道MERGE聲明,我認爲它完全適合我的目的。謝謝大家:) 同樣,我不知道你是什麼意思的TOP條款,請忍受我,這裏的初學者。我會將其谷歌出來,但任何關於在哪裏閱讀的指針都會非常有幫助。 :) – Fahad

+0

如果你需要一個接口,它不會改變方式。如果我是你,我會創建一個數據庫過程來執行操作,然後編寫一個接口,以便用戶能夠控制,取消和查看操作結果。順便說一下TOP子句限制你想要使用的記錄(插入,更新,合併或任何其他)。你應該首先了解SELECT子句,一切都從那裏開始......)乾杯兄弟。 – Rikki

+0

另一件事,如果我在那裏,我想和你有一隻熊。我一直陷在這個地獄...... :) – Rikki

3

不用擔心用10k紀錄的表現,你不會注意到它...

也許是更好的方式來做到這一點是導入Excel文件中的一個臨時表,並做處理用幾個簡單的SQL查詢...你會節省開發時間,它可能會表現得更好......

+0

我也有大約100列,所以有點擔心的表現。還沒有處理過這麼大的數據,所以有點着急。 :)將嘗試創建一個臨時表,爲Excel數據建議,然後合併2 :)謝謝:) – Fahad

+0

-1性能取決於許多東西。正如提問者已經說過的,他們擔心性能,而且他們可能會遇到很多情況,比如流量大,硬件不良,網絡問題以及其他許多我們不知道的事情。因此,即使它是一個記錄,表演也是一個問題。 – Rikki