2013-02-10 21 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