2009-10-25 97 views
1

以及這是第一次在這個論壇,所以我很清楚我的問題,並提前感謝從CVS文件更新記錄或刪除所有表?

我將在C#中創建一個軟件,這個應用程序需要一個CSV文件(約73,000行)。這些文件來自另一個系統,也可以改變CSV文件,這是什麼意思? CSV文件可以在一行中更改(數據),或者可以有更多新行或可以有更少的行,CSV每小時或半小時更改取決於!

我將這些行從CSV文件添加到SQL表中,第一次很容易..我只是在ADDNEW中爲CSV文件中的每一行。但是,由於這些額外的字段,或者在其他情況下,如果CSV中的一行發生更改,我無法刪除所有表以便從頭開始再次導入它,所以我無法從表中刪除所有數據。

所以我需要一種方法,可以自動驗證我的SQL表和CSV文件中的每條記錄?或者我需要逐一處理記錄?如果我比較每一個變化,它將是正確的使用光標fot?

謝謝

+0

你的意思是CVS或CSV? – orip 2009-10-25 15:20:00

回答

0

這不是一個簡單的答案;這是一個過程。

首先,您使用的是哪個版本的SQL Server?如果您使用的是SQL Server 2008,則可以訪問MERGE T-SQL命令,該命令可以允許您創建「upsert」命令(根據數據的存在更新或插入)。如果您使用的是舊版本,編碼會變得更復雜一些,但並非不可能。

其次,當您加載數據時,請首先加載到臨時表中。這允許您進行基於集合的比較,並根據需要進行「upsert」。在99.999%的情況下,您應該能夠在沒有光標的情況下執行此操作,並使其性能更好。

斯圖

0

如果您已經使用SSIS直接加載數據,並且不希望使用臨時表出於某種原因,你有某種關鍵的,你可以使用命令行,你可以使用TableDifference custom component。基本上,您將「舊」表和「新」表讀入兩個單獨的流中,按照相同的順序對它們進行排序並將它們傳遞給TableDifference。這會生成3個潛在輸出 - INSERT,UPDATE和DELETE。通常可以使用常規插入任務來處理INSERT,但UPDATE和DELETE可以使用單獨的命令調用,也可以通過流式傳輸到登臺表來批量更新或刪除操作。

0

現在我解決使用表差異SSI我的問題,我現在與合作,感謝所有雅ç後來