[英]SQL on-demand cache table (possibly using SQL MERGE)
我正在為應用程序實現按需SQL
緩存表,所以我有
具有列Type, Number, Value
CacheTable
然后我有一個名為GetValue( Type, Number )
的函數
所以我想有一個功能可以執行以下操作
如果( CacheTable
包含Type,Number),則返回值,否則調用GetValue( Type, Number)
並將該值放入CacheTable
並返回Value
有誰知道最優雅的方法嗎?
我當時在考慮使用SQL merge.
不知道一個人能得到什么優雅,但是我們可能會按照您的描述來做到。 查詢數據庫
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之間插入了數字,則在插入時出錯。 我只是捕捉到錯誤並跳過插入操作(因為我們可以假設值在定義上不會有所不同)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.