2012-10-19 47 views
0

我想了解如何簡化插入記錄,如果沒有存在或更新記錄,如果它已經存在的過程。我沒有使用存儲過程,儘管也許這是最有效的方式。Upsert - 高效更新或插入在VB.Net,SQL Server

這是必要的實際情況是將用戶偏好設置保存到我的SettingsUser表。

在MS Access中,我通常會拉DAO記錄集尋找指定的設置。如果記錄集恢復爲空,那麼我知道我需要添加一個新的記錄,我可以使用相同的記錄集對象。另一方面,如果它不是空的,我可以馬上更新設置的值。從理論上講,這只是兩個數據庫操作。

在.NET中這樣做的推薦方式是什麼?

+0

通常情況下,您將在存儲過程中擁有該行的數據並確定該密鑰是否已存在的邏輯。 UPDATE WHERE ... if @@ ROWCOUNT = 0 INSERT。在具有合適的隔離級別和錯誤處理的交易當然。將記錄集拉到應用程序中以搜索重複數據只是我可以想象做到的最低效的方式。除非將其序列化爲JSON,否則轉換爲XML,然後進行搜索。 –

回答

2

存儲過程當然是一種簡單的方法。您可以嘗試更新記錄,如果沒有記錄更改,請添加它。示例:

create procedure UpateUserSetting 
    @UserId int, 
    @Setting int 
as 

set nocount on 

update UserSetting 
set Setting = @Setting 
where UserId = @UserId 

if (@@rowcount = 0) begin 

    insert into UserSetting (
    UserId, Setting 
) values (
    @UserId, @Setting 
) 

end 

您可以在沒有存儲過程的情況下執行相同操作。然後,您將首先運行更新,並檢查從ExecuteNonQuery method返回的受影響行的數量,並根據需要在另一個查詢中執行插入操作。