CREATE TRIGGER [tr_a] ON [dbo].student
FOR  UPDATE
AS
declare @aa int
if update(math)
begin
  select @aa=math from deleted
  if @aa>=60
     raiserror ('数学成绩是及格的,不能更新',10,1)
     rollback transaction
  else
    update A
     set A.math=B.math
     from student A inner join inserted  B on A.s_id=B.s_id
end少了一句rollback transaction

解决方案 »

  1.   

    不好意思 
    少了句 rollbackCREATE TRIGGER [tr_a] ON [dbo].student
    FOR  UPDATE
    AS
    declare @aa int
    if update(math)
    begin
      select @aa=math from deleted
      if @aa>=60
          rollback
         raiserror ('数学成绩是及格的,不能更新')
      else
        update A
         set A.math=B.math
         from student A inner join inserted  B on A.s_id=B.s_id
    end
      

  2.   

    返回错误:
    服务器: 消息 156,级别 15,状态 1,过程 tr_a,行 11
    在关键字 'else' 附近有语法错误。但如果我是这样写:
    CREATE TRIGGER [tr_a] ON [dbo].student
    FOR  UPDATE
    AS
    declare @aa int
    if update(math)
    begin
      select @aa=math from deleted
      if @aa>=60
        raiserror ('数学成绩是及格的,不能更新',10,1)
         rollback
    end则下面的语句也不能更新:
    UPDATE student set math=85 WHERE s_id=3请指教,谢谢!
      

  3.   

    楼主写的s_name char(10),是不是应该改成s_name varchar(10)
      

  4.   

    应该是没有加Begin ...End的原因。
      

  5.   

    CREATE TRIGGER [tr_a] ON [dbo].student
    FOR  UPDATE
    AS
    declare @aa int
    if update(math)
    begin
      select @aa=math from deleted
      if @aa>=60
          Begin          --这里加上Begin
              rollback
              raiserror ('数学成绩是及格的,不能更新')
          End            --这里加上End
      else
         update A
         set A.math=B.math
         from student A inner join inserted  B on A.s_id=B.s_id
    end
      

  6.   

    谢谢各位,paoluo(一天到晚游泳的鱼)的答案是正确的 .问题解决了.