Create   TRIGGER trig_computeSum
ON dbo.Salary
FOR INSERT, UPDATE 
AS
--eg. check if instead of column 1-6 are updated
IF (COLUMNS_UPDATED() & 63) = 0
BEGIN
        Update Salary  set Salary.[Sum]=ins.[wage]+ins.[Item003]
        From Salary,Inserted ins
        Where salary.UserID=Ins.UserID and Salary.[Month] = Ins.[Month]
END

解决方案 »

  1.   

    to zarge(鲨至) ( ) 
    我第一次写,就是你的形式,可是我想动态的调整求和的列,这样就不行了!
      

  2.   

    触发器中用动态SQL,还真没试过,真有这种需求吗?
      

  3.   

    Create   TRIGGER trig_computeSum
    ON dbo.Salary
    FOR INSERT, UPDATE 
    AS
    --eg. check if instead of column 1-6 are updated
    IF (COLUMNS_UPDATED() & 63) = 0
    BEGIN
    select * into #a from Inserted
            Declare @str varchar(2000)
            set @str='ins.[wage]+ins.[Item003]'
            exec('Update Salary  set Salary.[Sum]='+@str+ 
            'From Salary,#a ins
            Where salary.UserID=Ins.UserID and Salary.[Month] = Ins.[Month]')
    END
      

  4.   

    to pengdali(大力 V3.0)
    非常感谢!已成功实现!
    不过我又遇到了新的问题,就是本来我的(COLUMNS_UPDATED() & 63) = 0,这个条件工作挺好的,但在我向Salary表中,添加了新列后(在最右边添加的,保证超过第6列),我发现这个条件出问题了,就是好像没有触发触发器,当我去掉这个条件,触发器又能触发了!难道是我的条件有问题吗?我的条件是要,除了前6列都触发触发器。请指教!