MySQL具有非常有用但专有的REPLACE INTOSQL命令。
REPLACE INTO
可以在SQL Server 2005中轻松模拟吗?
开始一个新的事务,先执行a Select()然后再执行UPDATEor或INSERTand COMMIT总是很麻烦,尤其是在应用程序中执行该操作时,因此总是保留该语句的2个版本。
Select()
UPDATE
INSERT
COMMIT
我想知道是否有一种简单且 通用的 方法将这种功能实现到SQL Server 2005中?
这让我很不喜欢MSSQL(博客上的rant)。我希望MSSQL受支持upsert。
upsert
@ Dillie-O的代码在较旧的SQL版本(+1票)中是个好方法,但它基本上仍然是两个IO操作(the exists然后the update或insert)。
exists
update
insert
基本上,这篇文章有一个更好的方法:
--try an update update tablename set field1 = 'new value', field2 = 'different value', ... where idfield = 7 --insert if failed if @@rowcount = 0 and @@error = 0 insert into tablename ( idfield, field1, field2, ... ) values ( 7, 'value one', 'another value', ... )
如果是更新,则减少为一个IO操作,如果是插入则为两个。
MS Sql2008 merge从SQL:2003标准引入:
merge
merge tablename as target using (values ('new value', 'different value')) as source (field1, field2) on target.idfield = 7 when matched then update set field1 = source.field1, field2 = source.field2, ... when not matched then insert ( idfield, field1, field2, ... ) values ( 7, source.field1, source.field2, ... )
现在,它实际上只是一个IO操作,但是代码很糟糕:-(