最佳答案
我已经编写了一个存储过程,如果有记录存在,它将执行更新操作,否则它将执行插入操作。它看起来像这样:
update myTable set Col1=@col1, Col2=@col2 where ID=@ID
if @@rowcount = 0
insert into myTable (Col1, Col2) values (@col1, @col2)
以这种方式编写它的逻辑是,更新将使用 where 子句执行隐式选择,如果该子句返回0,那么将执行插入操作。
这种方法的替代方法是执行选择,然后根据返回的行数执行更新或插入操作。我认为这是低效的,因为如果要进行更新,它将导致2个 select (第一个显式 select 调用和第二个隐式的 where of the update)。如果 proc 执行插入操作,那么效率就不会有什么差别。
我的逻辑可靠吗? 这就是将插入和更新组合到存储过程中的方法吗?