2011-12-17 110 views
0

我需要做一個sql查詢,試圖通過主鍵更新一個行,如果它不存在插入它。對於大多數數據庫(MySQL,H2,Postgres,Oracle,DB2,MSSQL,Hsql,Derby),該解決方案需要具有通用性。插入,如果沒有什麼更新

有關代碼示例,請考慮一個簡單的表格由兩列:ID(Pr.Key)和TXT

+2

這個名字是'UPSERT'。它通常通過'MERGE'實現,但這絕不是普遍可用的。你能對「大多數數據庫」更具體嗎? – 2011-12-17 21:02:34

+1

@Oded沒有。我不知道該怎麼嘗試 – 2011-12-17 21:02:39

+0

@MartinSmith我知道MySQL中有一個'REPLACE'語句,它完全符合我的要求,但它只適用於MySQL,所以本地解決方案不適合 – 2011-12-17 21:05:23

回答

3

你想SQL的MERGE聲明,但它不工作無處不在:

MERGE into thetable using (select theid from thetable) 
when matched then update thetable thecolumn = thevalue where id = theid 
when not matched then insert into thetable blablabla; 

另一個解決辦法是嘗試反正插入,處理錯誤,檢測是否是一個約束衝突如果是的話更新。

+0

這與'解決方案需要普及'矛盾。 – GSerg 2011-12-17 21:07:25

+1

嗯,它是最普遍的,我可以提出要求......另一種解決方案是嘗試插入,但這意味着要檢測到錯誤是唯一的關鍵約束違規! – fge 2011-12-17 21:30:43

0

可能:

INSERT INTO table (id,txt) VALUES (1,"Hello") 
    ON DUPLICATE KEY UPDATE txt="World"; 

但這是MySQL只

相關問題