又是触发器的问题所引发的问题, 请指教
我的问题是这样的:
首先我用dataset绑定了一个表 Tab_a
其中Tab_a 中有一个 字段 X_OnOff (其值为0 或 1,缺省为0)
现在我有一个用户界面 通过上面绑定的Dataset更新数据到Tab_a中,
问题是:
如果X_OnOff 为1 时 如何让前面的更新 失效 (也就是 说 X_OnOff为1
的记录 将保持先前的记录不变)
这样是否可以通过 对 Tab_a 的 UPDATE 触发事件来实现,如果可行,如何写
这个事件
谢谢先
hellowork(一两清风)
create trigger trg_update_Tab_a ON Tab_a
for UPDATE
as
if exists(select 1 from DELETED where X_OnOff = 1)
begin
ROLLBACK TRANSACTION /*回滚触发器,使更新失效*/
RETURN /*返回*/
end
上面的问题是解决了,但是新的问题又出现了
现在的问题是:
如果用户对于个别的纪录(特殊情况)要求恢复 X_OnOff 到 0的状态 ,
此时 任何更新却不能生效
该如何修改
------解决方案--------------------create trigger trg_update_Tab_a ON Tab_a
for UPDATE
as
if exists(select 1 from DELETED where X_OnOff = 1)
or exists(select 1 from inserted i join deleted d on d.主键 = i.主键
where i.X_OnOff = 0 and d.X_OnOff = 1 and i.主键 in (个别的纪录))
begin
ROLLBACK TRANSACTION /*回滚触发器,使更新失效*/
RETURN /*返回*/
end
------解决方案--------------------说说你的个别记录特殊需求是什么样的?
hellowork(一两清风)的触发器是针对所有的X_OnOff = 1记录修改做了回滚操作。
排除掉你的特别操作即可的
------解决方案--------------------新增个表
create table Tab_a_con(
value int default (0))
触发器改成
create trigger trg_update_Tab_a ON Tab_a
for UPDATE
as
if exists(select 1 from DELETED where X_OnOff = 1) and not exists (select * from Tab_a_con where value = 1)
begin
ROLLBACK TRANSACTION /*回滚触发器,使更新失效*/
RETURN /*返回*/
end
特殊更新时
update Tab_a_con set value=1
update Tab_a set X_OnOff=0 where xxxxxxxx
update Tab_a_con set value = 0
------解决方案--------------------用户对于个别的纪录(特殊情况)回滚到 X_OnOff 到 0的状态
------解决方案--------------------create trigger trg_update_Tab_a ON Tab_a
for UPDATE
as
if exists(select 1 from DELETED where X_OnOff = 1)
and exists(select 1 from insertED where X_OnOff = 1)--加的
begin
ROLLBACK TRANSACTION /*回滚触发器,使更新失效*/
RETURN /*返回*/
end
--如果有标识列,可简化条件
------解决方案--------------------或者专门建个用户,触发器里加上对用户的判断。user_name()