SQL Server 2005执行MySQL REPLACE INTO?

MySQL拥有这个令人难以置信的有价值的REPLACE INTO SQL命令。

这可以在SQL Server 2005中方便地模仿吗?

开始一个新的事务,执行Select(),之后UPDATEINSERT以及COMMIT总是有点不舒服,特别是在应用程序中执行它并因此不断维护声明的两个变体时。

我问自己是否有一个非常容易的也 全球 意味着在SQL Server 2005中实现这样的功能?

0
2019-05-03 22:58:07
资源 分享
答案: 3

这让我对MSSQL(我博客上的咆哮)感到沮丧。 我希望MSSQL持续upsert

@Dillie-O是代码,在较旧的SQL版本中(npls 1选票)是一种极好的方法,但是它仍然主要是2个IO过程(exists,然后是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过程,如果是插入,则将其降低为2个。

MS Sql2008从典型的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程序,但是代码很糟糕:-(

0
2019-12-03 04:27:56
资源

您正在寻求的能力通常称为UPSERT。 至少认识到它所谓的内容可以帮助你定位你正在寻找的东西。

我不认为SQL Server 2005有这么好的方法。 2008年提出了MERGE声明,可以用来完成收到的声明:http://www.databasejournal.com/features/mssql/article.php/3739131http://blogs.conchango.com/davidportas/archive/2007/11/14/SQL-Server-2008-MERGE.aspx

Merge在2005年的测试版中很容易获得,但他们在上一版本中将其删除了。

0
2019-05-07 17:48:32
资源

upsert / merge正在做什么是...的结果

IF EXISTS (SELECT * FROM [Table] WHERE Id = X)
   UPDATE [Table] SET...
ELSE
   INSERT INTO [Table]

因此,运气好的话,这些写作的混合以及这些伪代码可以获得重新定位点数。

0
2019-05-07 17:45:40
资源