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

sql触发器更新后及更新前比较的问题(想了几天了)
各位SQL前辈,我现在有一个问题,表名,TEST   结构如下

    名称     单价     数量

    钢针     0.5         20
    铁丝     12           30
    毛绳       5           40

问题如下:

          我想写一个触发器,触发过程为,当用户在修改这个表的记录时,如果修改后的数量和当前数据库表中记录的数量不一样,自动把数量还原为现在数据表中的数量,其它的字段正常更新,也就是说任何更新操作数量都不允许改变,但其它字段内容可以改变:如我用下面的的命令:
          update   test   set   单价=1.5,数量=30   where   名称= '钢针 '
          按照正常的逻辑,现在变的结果应该变为:
     
        名称     单价     数量
        钢针     1.5         30
        铁丝     12           30
        毛绳       5           40
       
        我希望执行上面的命令后的结果为:

        名称     单价     数量
        钢针     1.5         20
        铁丝     12           30
        毛绳       5           40
        但我希望只改变单价,钢针的数量不变,只有SA用户操作时,数量才可以改变,而且必须在触发器里面来实现,请问坛子里面的高人,这个触发器的代码应该如何来写!解决后必有重谢!!



------解决方案--------------------
更改下:
alter trigger tu_TEST on TEST
for update
as
begin
update test
set 单价=i.单价,
数量=case when suser_sname()= 'sa ' then i.数量 else d.数量 end
from test,inserted i,deleted d
where test.名称=i.名称 and i.名称=d.名称
end