请大虾帮忙改改这触发器??
CREATE TRIGGER TR_upd_t2 ON [DBO].[t1]
FOR UPDATE
AS
IF @@ROWCOUNT=0
RETURN
ELSE if @@rowcount<>0 and checks='Y'
BEGIN
这里写提示不能修改的语句
END
ELSE if @@rowcount<>0 and checks<>'Y'
begin
UPDATE t2
set c1=a.c1,c2=a.c2,checks=a.checks from inserted a
where t2.id=a.id
end
也就是说t1和t2具有相同的表结构和一样的记录,当t1的check(审核)是Y时,就不能对t1做修改了,当无审核就可修改且更新t2的相同记录。。
问题点数:20、回复次数:6Top
1 楼flyeq008()回复于 2006-03-01 10:06:02 得分 0
服务器: 消息 207,级别 16,状态 3,过程 TR_upd_t2,行 8
列名 'checks' 无效。
服务器: 消息 207,级别 16,状态 1,过程 TR_upd_t2,行 21
列名 'checks' 无效。
就是 and checks='Y' 这里无效,,删掉又可以,但是必需要这样判断呀
Top
2 楼lsqkeke(可可)回复于 2006-03-01 10:11:05 得分 20
当t1的check(审核)是Y时,就不能对t1做修改了,
------------
这个判断写在触发器中是没有用的,多余的!
你应该在应用程序中处理这个判断。审核的话就不更新T2
触发器TR_upd_t2 是你修改表1记录之后才执行的。已审核状态下@@rowcount<>0是等于0的,
那么你触发器中的第一个判断就没有用,且触发器也不执行Top
3 楼lsqkeke(可可)回复于 2006-03-01 10:12:26 得分 0
你只需要写:
CREATE TRIGGER TR_upd_t2 ON [DBO].[t1]
FOR UPDATE
AS
IF @@ROWCOUNT=0
RETURN
ELSE
UPDATE t2
set c1=a.c1,c2=a.c2,checks=a.checks from inserted a
where t2.id=a.id
Top
4 楼flyeq008()回复于 2006-03-01 10:22:41 得分 0
那建个触发器,当审核是'Y'时,只要更新t1任一字段的话,就把t1的审核状态去掉。。行吗??Top
5 楼lsqkeke(可可)回复于 2006-03-01 10:28:03 得分 0
当审核是'Y'时,只要更新t1任一字段的话,就把t1的审核状态去掉。。
这个功能到不如在修改的update语句里面操作,确定修改时,将审核状态取消,
不用去建立一个触发器来单独实现Top
6 楼flyeq008()回复于 2006-03-01 10:33:22 得分 0
问题上现在修改不了应用程序,只能通过触发器来做哦。。。~~Top




