SQL Server 2005 销售量 MySQL 取而代之?

MySQL 有这个非常有用,而是专有的团队
REPLACE INTO

SQL.

它很容易模仿它 SQL Server 2005?

启动新的事务执行
Select//

, 然后是
UPDATE

, 或者
INSERT


COMMIT

总是有点痛苦,特别是当你在申请中进行,因此总是节省 2 操作员版本。

我想知道是否有简单和

普遍的

实现这种功能的方法 SQL Server 2005?
已邀请:

詹大官人

赞同来自:

这就是让我烦恼的 MSSQL /
http://bizvprog.blogspot.com/2 ... .html
/. 我想要 MSSQL 支持的
upsert

.

代码@ dillie-o是旧版本的好方法 SQL /+1 投票/, 但它仍然是两个操作组成 IO /
exists

, 接着
update

或者
insert

/

基本上 , 在
https://coderoad.ru/13540/
有一点好方法:


--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, 但是糟糕的代码 :-/

詹大官人

赞同来自:

您正在寻找的功能传统上叫 UPSERT. 至少知道它是如何调用的,可以帮助您找到您正在寻找的内容。

我不认为 SQL Server 2005 有一些很好的方法可以做到。 2008 进入运营商 MERGE, 可用于实现这一目标,如下所示:
http://www.databasejournal.com ... 39131
或者
http://blogs.conchango.com/dav ... .aspx
合并中有测试版 2005 多年来,但他们在最后的释放中删除了它。

江南孤鹜

赞同来自:

制作 upsert/merge, 是一种效果的东西......


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


所以,我希望,这些文章的组合和这个伪代码可以从死点移动交易。

喜特乐

赞同来自:

我写了一条消息
http://www.samsaffron.com/blog ... .aspx
这种情况下。

底线是,如果您想要便宜的更新并希望能够同时使用,请尝试:


update t
set hitCount = hitCount + 1
where pk = @id

if @@rowcount < 1
begin
begin tran
update t with /serializable/
set hitCount = hitCount + 1
where pk = @id
if @@rowcount = 0
begin
insert t /pk, hitCount/
values /@id,1/
end
commit tran
end


所以你有了 1 操作更新和最大值 3 插入操作。 因此,如果您通常更新,这是一个安全的便宜选项。

我也会非常小心不要使用同时使用不安全的任何东西。 很容易获得生产中的主要键或重复行的违规行为。

要回复问题请先登录注册