有时我的存储过程看起来像
create procedure handle_data
@fk int,
@value varchar(10)
as
begin
if exists (select * from my_table where id = @fk)
begin
update my_table
set value = @value
where id = @fk
end
else
begin
insert into my_table (fk, value)
select @fk, @value
end
end
调用此存储过程的应用程序设计可能存在错误。
我是否应该避免制作执行相同存储过程和插入新数据以及更新旧数据的方法的应用程序?
有没有更好的方法来以一种方法实现更新或插入数据?
我正在使用 SQL Server 2005 / 2008。
一种稍微更有效的方法(最坏的情况是对现有数据进行一次搜索/扫描而不是两次):
MERGE
可能很诱人,但是有几个原因让我回避它。MERGE
可能还有更多尚未发现的错误MERGE 语句将让您执行一个命令,
有关合并的更多信息,请参阅MSDN上的这篇文章
SQL Server 2008 中引入该
MERGE
语句正是为了处理这种情况。