【发布时间】:2011-01-17 13:42:12
【问题描述】:
我有一个关于 SQL Server 性能的问题。
假设我有一个表persons,其中包含以下列:id、name、surname。
现在,我想在此表中插入一个新行。规则如下:
如果
id不存在于表中,则插入该行。如果存在
id,则更新。
我这里有两个解决方案:
第一:
update persons
set id=@p_id, name=@p_name, surname=@p_surname
where id=@p_id
if @@ROWCOUNT = 0
insert into persons(id, name, surname)
values (@p_id, @p_name, @p_surname)
第二:
if exists (select id from persons where id = @p_id)
update persons
set id=@p_id, name=@p_name, surname=@p_surname
where id=@p_id
else
insert into persons(id, name, surname)
values (@p_id, @p_name, @p_surname)
什么是更好的方法?似乎在第二种选择中,要更新一行,必须搜索两次,而在第一种选择中 - 只需一次。有没有其他解决方案?我正在使用 MS SQL 2000。
【问题讨论】:
-
不确定,但我会做一个 if ((COUNT(*) ) > 0) 然后更新第二个选项
标签: sql-server tsql insert-update