我已经编写了一个存储过程,如果记录存在,它将执行更新,否则它将执行插入.它看起来像这样:
update myTable set Col1=@col1, Col2=@col2 where ID=@ID
if @@rowcount = 0
insert into myTable (Col1, Col2) values (@col1, @col2)
以这种方式编写的逻辑是,更新将使用where子句执行隐式 Select ,如果返回0,则将进行插入.
这种方法的替代方法是进行 Select ,然后根据返回的行数进行更新或插入.我认为这是低效的,因为如果要进行更新,它将导致2次 Select (第一次显式 Select 调用,第二次隐式 Select 调用在更新的位置).如果proc进行插入,那么效率就不会有任何差异.
我的逻辑正确吗?