http://en.wikipedia.org/wiki/Upsert
Insert Update stored proc on SQL Server
有没有一些聪明的方式来做这个在sqlite,我没有想过?
基本上,如果记录存在,我想更新四列中的三个,
如果不存在,我想使用第四列的默认(NUL)值插入记录。
ID是主键,因此只有一条记录到UPSERT。
(我试图避免SELECT的开销,以确定我是否需要UPDATE或INSERT显然)
建议?
假设表中有3列。ID,NAME,ROLE
BAD:这将使用ID = 1的新值插入或替换所有列:
INSERT OR REPLACE INTO Employee (id,name,role) VALUES (1,'John Foo','CEO');
BAD:这将插入或替换2列… NAME列将被设置为NULL或默认值:
INSERT OR REPLACE INTO Employee (id,'code monkey');
GOOD:这将更新2列。
当ID = 1存在时,NAME将不受影响。
当ID = 1不存在时,名称将为默认值(NULL)。
INSERT OR REPLACE INTO Employee (id,role,name) VALUES ( 1,'code monkey',(SELECT name FROM Employee WHERE id = 1) );
这将更新2列。
当ID = 1存在时,ROLE将不受影响。
当ID = 1不存在时,角色将设置为“Benchwarmer”而不是默认值。
INSERT OR REPLACE INTO Employee (id,role) VALUES ( 1,'Susan Bar',COALESCE((SELECT role FROM Employee WHERE id = 1),'Benchwarmer') );