2
有没有什么方法可以从本质上追踪一行从SQL表中拉出的次数?当选择一行时增加一个值SQL
例如在我的表我有一个列数。每次SQL语句拉一个特定的行(让我们称之为rowA),rowA的'count'值增加1.
无论是在表中的设置或声明会很好,但我找不到这样的事情。
我知道,我可以把它分成两个语句来达到同样的事情,但我宁愿只发送一个。
有没有什么方法可以从本质上追踪一行从SQL表中拉出的次数?当选择一行时增加一个值SQL
例如在我的表我有一个列数。每次SQL语句拉一个特定的行(让我们称之为rowA),rowA的'count'值增加1.
无论是在表中的设置或声明会很好,但我找不到这样的事情。
我知道,我可以把它分成两个语句来达到同样的事情,但我宁愿只发送一个。
做到这一点,最好的办法就是限制表中的读访问的存储过程。
这个存储过程将采取的各种输入(过滤选项),以确定所返回的行。
返回的行之前,他们的计数器域递增。
注意,更新和选择命令共享相同的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
一个体面的替代办法是处理它在你的数据访问层的应用端。
在MySQL中,你应该使用'CONCAT( '%',@pMyParameter, '%')''不+'进行连结。 – 2013-02-11 00:07:35
谢谢JW,我误解了SQL Server的问题。 – 2013-02-11 00:08:21
我建议使用触发器而不是尝试限制对存储过程的访问。这会更可靠。 – 2013-02-11 00:21:20