日期:2014-05-18  浏览次数:20466 次

新手问题,这个触发器应该怎么写?
表名:[user]
字段:user_id,user_state,leave_time
user_id为会员ID
user_state为会员在线状态,会员登陆时为1
leave_time为会员最近登陆时间

请问怎么写一个触发器来判断,会员登陆时间超过10分钟,则user_state变为0.


------解决方案--------------------
会员登陆时间超过10分钟,则user_state变为0

-----------

這個需要你在前台判斷,然後執行一條更新語句即可。
------解决方案--------------------
触发器做不了吧.
这种东西一般在程序中用定时器做
------解决方案--------------------
不用触发器,用作业(JOB)来实现定时处理。

-------------------------------------------------
企业管理器
--管理
--SQL Server代理
--右键作业
--新建作业
-- "常规 "项中输入作业名称
-- "步骤 "项
--新建
-- "步骤名 "中输入步骤名
-- "类型 "中选择 "Transact-SQL 脚本(TSQL) "
-- "数据库 "选择执行命令的数据库
-- "命令 "中输入要执行的语句:
update [user] set user_state=0 where datediff(mi,leave_time,getdate())=10
--确定
-- "调度 "项
--新建调度
-- "名称 "中输入调度名称
-- "调度类型 "中选择你的作业执行安排
--如果选择 "反复出现 "
--点 "更改 "来设置你的时间安排


然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行

设置方法:
我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择 "自动启动 "--确定.
------解决方案--------------------
这个用触发器好像不行吧! 可以考虑用job每分钟监测一下[user]这个表,如果会员最近登陆时间和当前时间比较,超过10分钟,就update这个user_state变为0.
------解决方案--------------------
建一个作业,每1分钟执行一下这个语句,误差不会超过1分钟

update [user]
set user_state = 0
where leave_time <= datediff(mi,-10,getdate())

------解决方案--------------------
语句写错了,改改

update [user]
set user_state = 0
where leave_time <= dateadd(mi,-10,getdate())


------解决方案--------------------
--修改一下SQL语句:
update [user] set user_state=0 where user_state=1 and datediff(mi,leave_time,getdate())> =10