2012-09-12 55 views
2

我上實現按需SQL緩存表中的應用程序工作,所以我有SQL點播緩存表(可能使用SQL MERGE)

CacheTable與列Type, Number, Value

然後,我有一個函數所謂GetValue(Type, Number)

所以我想有,做了功能如下

如果(CacheTable包含類型,數量),那麼換貨政...價值 其他電話GetValue(Type, Number)並把這個值到CacheTable並返回價值

有誰知道最優雅的方式來做到這一點?

我想用SQL merge.

回答

0

不知道如何優雅的人可以得到的,但我們可以做它只是你描述的方式。查詢數據庫

select Value from Tab1 where [email protected] and [email protected] 

,如果沒有行返回,計算值,然後將其存儲在數據庫中的下一次。 但是,如果「計算值」需要數據庫本身,我們可以計算它在數據庫中,那麼我們可以做全週期與一個數據庫往返 - 更多的「優雅」也許,但至少快比3輪旅行(查找,計算,存儲)。

declare @val int 
select @val=Value from Tab1 where [email protected] and [email protected] 
if @@ROWCOUNT=0 BEGIN 
    exec compute_val @type,@num,@val OUTPUT 
    insert into Tab1 values (@type,@num,@val) 
END 
SELECT @val[Value]--return 

對SQL合併的唯一用途是,如果你認爲有可能是併發用戶數插入上述選擇和插入之間,使上插入一個錯誤。我只是趕上錯誤,並跳過插入(因爲我們可以假設值不會有所不同)。