小编典典

SQL Server 2005实现MySQL替换成吗?

mysql

MySQL具有非常有用但专有的REPLACE INTOSQL命令。

可以在SQL Server 2005中轻松模拟吗?

开始一个新的事务,先执行a Select()然后再执行UPDATEor或INSERTand
COMMIT总是很麻烦,尤其是在应用程序中执行该操作时,因此总是保留该语句的2个版本。

我想知道是否有一种简单且 通用的 方法将这种功能实现到SQL Server 2005中?


阅读 254

收藏
2020-05-17

共1个答案

小编典典

这让我很不喜欢MSSQL(博客上的rant)。我希望MSSQL受支持upsert

@ Dillie-O的代码在较旧的SQL版本(+1票)中是个好方法,但它基本上仍然是两个IO操作(the exists然后the
updateinsert)。

基本上,这篇文章有一个更好的方法:

--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 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操作,但是代码很糟糕:-(

2020-05-17