SQL2005 触发器问题

[复制链接]
查看11 | 回复3 | 2010-7-23 06:44:44 | 显示全部楼层 |阅读模式
一个User表, id(主键) beginTime(datatime)type(int)
我现在想实现这样的效果:
当向这个表里面插入一条数据的时候(1,2010-06-25 00:00:00.000,0),如果begintime的时间和 当前时间相同的话,就把type 变成1
——————————————————————————————
请问这个触发器该如何去写?还有就是 插入语句和触发器 都写在插入方法里面么?虚心请教高手 万分感激……:) 谢谢了
create trigger t_user on users
after insert
as
begin
update users
set type=1
where begintime =(select getDate()) and type=0
end
------------
这是我写的 不知道对不对 请高手给予指点 谢谢了 :D
--------------------------------------------
-------------
我的意思是 begintime是可以随便输入的 如果当前时间和输入的时间(begintime)相同的话 就执行更新
1和2楼的朋友 谢谢你 :)
——————————————————
假如我现在输入的 begintime 是2010-07-20 13:00:00.000我先执行 触发器,然后执行插入语句当bigintime的时间到和今天下午13点的时间相同了, 它的typpe 会update 变成1么?

回复

使用道具 举报

千问 | 2010-7-23 06:44:44 | 显示全部楼层
一个User表, id(主键) beginTime(datatime)type(int)根据你的问题,现在给出解释:1、对于User表,如果字段id作为主键,则通常情况下,是自增型的,是不需要插入数值的,系统根据根据当前最后一条记录的ID值按照规则生成下一条记录的id值。因此你只须插入其他字段的值即可。insert into user (begintime,type) values ('2010-06-25 00:00:00.000',0)2、为了便于阅读,创建trigger 采用分步执行的思路进行 获取当前插入记录的id ,时间, 判断时间是否满足条件,如果满足条件则执行update
回复

使用道具 举报

千问 | 2010-7-23 06:44:44 | 显示全部楼层
用After触发器,是没问题的。After触发器原理:它会在触发insert、update或delete动作之后执行,并且AFTER 触发器只能对表起作用。插入的数据保存在临时表Inserted中。你的触发器关键问题出现在 Where语句部分create trigger t_user on usersafter insert as
回复

使用道具 举报

千问 | 2010-7-23 06:44:44 | 显示全部楼层
你好,我想你的意思是插入的时间如果是当天内的就把type变为1是吧?我觉得你最好还是在INSERT语句里插入的时候就做下判断,不然触发器可能会带来很多问题。当然如果你就想用触发器的话,建议使用instead of触发器,更符合你的需要,触发器使用create trigger语句创建,如果触发器不存在逻辑问题,创建好之后就起作用了。如下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行