Upsert - 在VB.Net,SQL Server中进行高效更新或插入

时间:2012-10-19 16:58:34

标签: sql-server vb.net ado.net

我试图了解如何在不存在的情况下简化插入记录的过程,或者如果记录已存在则更新记录。我没有使用存储过程,尽管这可能是最有效的方法。

需要这样做的实际情况是将用户首选项/设置保存到我的SettingsUser表。

在MS Access中,我通常会提取DAO记录集以查找指定的设置。如果记录集返回空,那么我知道我需要添加一条新记录,我可以使用相同的记录集对象。另一方面,如果它不是空的,我可以立即更新设置的值。从理论上讲,这只是两个数据库操作。

在.NET中推荐的方法是什么?

1 个答案:

答案 0 :(得分:2)

存储过程当然是一种简单的方法。在那里,您可以尝试更新记录,如果没有记录更改,则添加它。例如:

create procedure UpateUserSetting
  @UserId int,
  @Setting int
as

set nocount on

update UserSetting
set Setting = @Setting
where UserId = @UserId

if (@@rowcount = 0) begin

  insert into UserSetting (
    UserId, Setting
  ) values (
    @UserId, @Setting
  )

end

您可以在没有存储过程的情况下执行相同的操作。然后,您将首先运行更新,并检查从ExecuteNonQuery method返回的受影响行的数量,并在需要时在另一个查询中执行插入。