create trigger tr_process on bill
for insert,update
as
if update(ifupdate) or updatedate(updatedate)
   return
update a set ifupdate=1,updatedate=getdate()
from bill a, inserted i
where a.主键=i.主键

解决方案 »

  1.   

    create trigger tri_name on Table_name
    for insert
    as
    begin
    update Table_name set ifupdate=1,updatedate=getdate()
    where Table_name.PK_id=PK_idend
    更新时的,没经过测试。
      

  2.   

    請問在sql觸發器裏如何向本表本行的字段付值啊,像Oracle那樣
      

  3.   

    不行哦,如果执行了update 语句但是没有更新数据,也就是原数据不变的情况下也不能把ifupdate修改成1哦
      

  4.   

    这样写可以,但是必须在条件那里把所有的字段加上更新前与更新后的比较,所以比较麻烦
    update a set ifupdated=1,upddate=getdate() 
    from trade a, inserted i,deleted d where a.td_id=i.td_id
    and i.td_id=d.td_id 
    and i.maker<>d.maker
    有没有其他的解决方案啊,请教各位大虾!!!
      

  5.   

    可以用游标测试是否有更新 如果有更新就执行操作 否则不执行操作
    CREATE TRIGGER TRI_TEST ON [数据表]
    FOR UPDATE 
    AS
    IF UPDATE([字段])
    BEGIN
       DECLARE @INSERT CHAR(10) --新数据
       DECLARE @DELETE CHAR(10) --原来的数据
     DECLARE CUR_INSERT CURSOR
     FOR SELECT 名称 FROM INSERTED
     OPEN CUR_INSERT
     FETCH NEXT FROM CUR_INSERT INTO @INSERT
     CLOSE CUR_INSERT
     DEALLOCATE CUR_INSERT
     DECLARE CUR_DELETE CURSOR
     FOR SELECT 名称 FROM DELETED
     OPEN CUR_DELETE
     FETCH NEXT FROM CUR_DELETE INTO @DELETE
     CLOSE CUR_DELETE
     DEALLOCATE CUR_DELETE
      IF @INSERT <>@DELETE  --比较是否有更新
      -------------
      --所要的操作--
      -------------
    END
    GO