2013-02-10 24 views
2

有沒有什麼方法可以從本質上追蹤一行從SQL表中拉出的次數?當選擇一行時增加一個值SQL

例如在我的表我有一個列數。每次SQL語句拉一個特定的行(讓我們稱之爲rowA),rowA的'count'值增加1.

無論是在表中的設置或聲明會很好,但我找不到這樣的事情。

我知道,我可以把它分成兩個語句來達到同樣的事情,但我寧願只發送一個。

回答

2

做到這一點,最好的辦法就是限制表中的讀訪問的存儲過程。

這個存儲過程將採取的各種輸入(過濾選項),以確定所返回的行。

返回的行之前,他們的計數器域遞增。

注意,更新和選擇命令共享相同的where子句。

create procedure Select_From_Table1 
    @pMyParameter varchar(20), -- sample filter parameter 
as 

-- First, update the counter, only on the fields that match our filter 
update MyTable set Counter = Counter + 1 
where 
    MyFilterField like CONCAT('%', @pMyParameter, '%') -- sample filter enforcement 

-- Now, return those rows 
select 
    * 
from 
    MyTable 
where 
    MyFilterField like CONCAT('%', @pMyParameter, '%') -- sample filter enforcement 

一個體面的替代辦法是處理它在你的數據訪問層的應用端。

+2

在MySQL中,你應該使用'CONCAT( '%',@pMyParameter, '%')''不+'進行連結。 – 2013-02-11 00:07:35

+0

謝謝JW,我誤解了SQL Server的問題。 – 2013-02-11 00:08:21

+0

我建議使用觸發器而不是嘗試限制對存儲過程的訪問。這會更可靠。 – 2013-02-11 00:21:20