我现在要实现这样一个操作
  当某个用户的积分(用户表中的一个字段)发生变化时,先判断一下他的积分是否大于0,如果积分不是大于0 ,则减去一个企业币已获得10个积分。。具体情况:用户表  user_userinfo  
         积分字段:userinfo_integral
         企业币字段: userinfo_balance
             我是这样写的:
       CREATE   TRIGGER   updateBtoA   ON   [dbo].[user_userinfo]     
      FOR     UPDATE   
      AS    declare @userinfo_integral int ;
select @userinfo_integral=userinfo_integral where userinfo_id=deleted.userinfo_id ; if(@userinfo_integral<=0)

update user_userinfo set userinfo_balance=userinfo_balance-1 ,
userinfo_integral=userinfo_integral+10
where userinfo_id=inserted.userinfo_id ;go但是这个触发器报错呀,说“列前缀‘inserted’与查询中所用的表名或别名不匹配”?这是什么原因呢,我要实现这样一个功能,我的触发器应该怎么样写呢?不甚感激!

解决方案 »

  1.   


    select @userinfo_integral=userinfo_integral
    from user_userinfo  
    where userinfo_id=deleted.userinfo_id 
    if(@userinfo_integral <=0) update user_userinfo set userinfo_balance=userinfo_balance-1 , 
    userinfo_integral=userinfo_integral+10 
    where userinfo_id=inserted.userinfo_id ; go 
      

  2.   


    update user_userinfo set userinfo_balance=userinfo_balance-1 , 
    userinfo_integral=userinfo_integral+10 
    where userinfo_id=(select userinfo_id from inserted) ;
      

  3.   

    alter   TRIGGER   updateBtoA   ON   [dbo].[user_userinfo]      
          FOR     UPDATE    
          AS    
    declare @userinfo_integral int ; 
    select @userinfo_integral=userinfo_integral where userinfo_id=(select userinfo_id from inserted) ; if(@userinfo_integral <=0) 
    update user_userinfo set userinfo_balance=userinfo_balance-1 , 
    userinfo_integral=userinfo_integral+10 
    where userinfo_id=(select userinfo_id from inserted) 还是请问各位,我现在修改成了这样,还是报错 。红色的部分报错:userinfo_integral 无效,明明在user_userinfo中有这个字段呀
      

  4.   

    lter   TRIGGER   updateBtoA   ON   [dbo].[user_userinfo]      
          FOR     UPDATE    
          AS    
    declare @userinfo_integral int ; 
    select @userinfo_integral=userinfo_integral from user_userinfo
    where userinfo_id=(select userinfo_id from inserted) ; if(@userinfo_integral  <=0) 
    update user_userinfo set userinfo_balance=userinfo_balance-1 , 
    userinfo_integral=userinfo_integral+10 
    where userinfo_id=(select userinfo_id from inserted)  
      

  5.   

    alter   TRIGGER   updateBtoA   ON   [dbo].[user_userinfo]       
          FOR     UPDATE     
          AS     
    declare @userinfo_integral int ;  
    select @userinfo_integral=userinfo_integral from user_userinfo 
    where userinfo_id=(select userinfo_id from deleted) ;  while userinfo_integral <=0
    begin
        update user_userinfo set userinfo_balance=userinfo_balance-1 ,  
         userinfo_integral=userinfo_integral+10  
        where userinfo_id=(select userinfo_id from deleted)  
    end
    我个人认为这里应该是用deleted,因为是修改之前的 userinfo_id 对吗
      

  6.   

    update user_userinfo set userinfo_balance=userinfo_balance-1 , 
    userinfo_integral=userinfo_integral+10 
    where userinfo_id=(select userinfo_id from inserted) ;