Sql-Server-2008
如何處理更新或插入情況
有時我的儲存過程看起來像
create procedure handle_data @fk int, @value varchar(10) as begin if exists (select * from my_table where id = @fk) begin update my_table set value = @value where id = @fk end else begin insert into my_table (fk, value) select @fk, @value end end
呼叫此儲存過程的應用程序設計可能存在錯誤。
我是否應該避免製作執行相同儲存過程和方法來插入新數據並更新舊數據的應用程序?
有沒有更好的方法以一種方法實現更新或插入數據?
我正在使用 SQL Server 2005 / 2008。
一種更有效的方法(最壞的情況是對現有數據進行一次搜尋/掃描,而不是兩次):
UPDATE dbo.whatever SET ... WHERE key = @key; IF @@ROWCOUNT = 0 BEGIN INSERT dbo.whatever ... END
MERGE
可能很誘人,但是有幾個原因我會迴避它。
- 語法令人生畏且難以記憶
- 除非您有意添加特定的鎖定提示,否則您不會獲得比上述方法更多的並發性
- 有許多未解決的錯誤,
MERGE
可能還有更多尚未發現的錯誤