ado*_*lot 1 sql-server-2008 database-design insert t-sql update
有时我的存储过程看起来像
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
Run Code Online (Sandbox Code Playgroud)
调用此存储过程的应用程序设计可能存在错误。
我应该避免制作执行相同存储过程和方法来插入新数据并更新旧数据的应用程序吗?
有没有更好的方法来以一种方法实现更新或插入数据?
我正在使用 SQL Server 2005 / 2008。
一种稍微更有效的方法(最坏的情况是对现有数据执行一次搜索/扫描,而不是两次):
UPDATE dbo.whatever SET ... WHERE key = @key;
IF @@ROWCOUNT = 0
BEGIN
INSERT dbo.whatever ...
END
Run Code Online (Sandbox Code Playgroud)
MERGE
可能很诱人,但有几个原因让我回避它。
MERGE
可能还有更多尚未发现