我的问题是这样的:首先我用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的状态 ,
此时 任何更新却不能生效该如何修改

解决方案 »

  1.   

    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
      

  2.   

    说说你的个别记录特殊需求是什么样的?hellowork(一两清风)的触发器是针对所有的X_OnOff = 1记录修改做了回滚操作。
    排除掉你的特别操作即可的
      

  3.   

    新增个表
    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
      

  4.   

    用户对于个别的纪录(特殊情况)回滚到 X_OnOff 到 0的状态
      

  5.   

    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
    --如果有标识列,可简化条件
      

  6.   

    或者专门建个用户,触发器里加上对用户的判断。user_name()