不确定一个人能变得多么优雅,但我们可能会按照您描述的方式来做。查询数据库
select Value from Tab1 where Type=@type and Number=@num
如果没有返回行,则计算该值,然后将其存储在数据库中以供下次使用。但是,如果“计算值”需要数据库本身,并且我们可以在数据库中计算它,那么我们可以用一次数据库往返来完成整个循环——也许更“优雅”但至少比 3 次往返更快(查找、计算、存储)。
declare @val int
select @val=Value from Tab1 where Type=@type and Number=@num
if @@ROWCOUNT=0 BEGIN
exec compute_val @type,@num,@val OUTPUT
insert into Tab1 values (@type,@num,@val)
END
SELECT @val[Value]--return
SQL Merge 的唯一用途是,如果您认为可能有并发用户,并且在上面的 select 和 insert 之间插入了数字,则在插入时会出错。我只是抓住错误并跳过插入(因为我们可以假设值不会根据定义不同)。