2013-03-14 86 views
0

我已經創建了一個database(從XML讀取&填充數據)。我用SqlBulkCopy完成了這個。 但情況是隻要XML被更新(可插入新記錄或修改現有記錄) ...因此數據庫也應更新,所以我創建了一個解決方案, 首先是所有表的記錄應該在數據庫中刪除&再次執行SqlBulkCopy,所以數據可以更新......如何用新的和修改的記錄更新數據庫?

但是這似乎是非常糟糕的一種方式。

有什麼方法可以只更新那些記錄,如果源XML有任何新記錄,需要插入新記錄嗎?

我也嘗試過一些數據集合並操作,但我找不出正確的方式來使用它們。

+0

根據你的分貝你可以使用觸發器。 – revoua 2013-03-14 07:10:35

回答

1

試試這個:

Serialize the xml成一個類的對象 - 你可以將其添加爲這個類對象即List<object>的集合。然後通過一個C# Stored Procedure調用,傳遞xml的唯一ID - 現在序列化的記錄。您可以循環收集並使用存儲過程匹配每個ID。如果來自xml的記錄不是太多,這可能是性能問題。

在存儲過程中做一個IF SELECT Count(*)... > 0。如果返回值大於0,則記錄存在:

IF(SELECT COUNT(*) FROM table where uniqueid = @id) > 0) 
BEGIN 
    UPDATE table ... WHERE uniqueid = @id 
END 
ELSE 
BEGIN 
    INSERT INTO table (...) VALUES(...) 
END 

或者利用MERGE INTO這也是偉大的使用。

讓存儲過程返回一個值或boolen來指示數據庫已成功更新。