簡體   English   中英

SQL按需緩存表(可能使用SQL MERGE)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM