ALTER   trigger IsUpdatetable
 on TABLE1 for update
as
if update(name)
BEGIN 
RAISERROR ('变动', 10, 1)
--ROLLBACK TRANSACTION
END在更新name字段的不论数据是否相同都提示发生了变化
怎么判断更新的数据是否和原数据库中修改前的相同了

解决方案 »

  1.   

    ALTER   trigger IsUpdatetable
     on TABLE1 for update
    as
    if update(name)
      if exists (select 1 from inserted i,deleted d where i,pk=d.pk and i.name<>d.name)
      BEGIN 
         RAISERROR ('变动', 10, 1)
         --ROLLBACK TRANSACTION
      END
      else
      BEGIN 
         --update ... set name= 但是前后数据相同
      END
      

  2.   

    改小错误ALTER   trigger IsUpdatetable
     on TABLE1 for update
    as
    if update(name)
      if exists (select 1 from inserted i,deleted d where i.pk=d.pk and i.name<>d.name)
      BEGIN 
         RAISERROR ('变动', 10, 1)
         --ROLLBACK TRANSACTION
      END
      else
      BEGIN 
         --update ... set name= 但是前后数据相同
      ENDgo--PS:这样判断表必须有主键
      

  3.   

    ALTER   trigger IsUpdatetable
     on TABLE1 for update
    as
    BEGIN 
    declare @oldname varchar(20)
    declare @newname varchar(20)
    select @oldname=d.name from deleted d
    select @newname=i.name from inserted i
    if @oldname!=@newname
    RAISERROR ('变动', 10, 1)
    --ROLLBACK TRANSACTION
    END
      

  4.   

    IF EXISTS(SELECT 1 FROM INSERTED I INNER JOIN DELETED D ON I.关键字 = D.关键字
              WHERE I.NAME <> D.NAME)
    BEGIN
        RAISERROR('变动', 10, 1)
        ROLLBACK TRANSACTION
    END