create function getact(@grade int,@newuserid int,@dd int)
returns int
as 
begin
 declare @a int, @b int, @c int, @a1 int, @b1 int, @act int, @id int 
--取出豆豆消费上下两条记录 
select top 1 @id =id,@a=dd,@b=activity from headtitle where dd <@dd order by id desc 
select top 1 @a1=dd,@b1=activity from headtitle where id>@id 
--计算升级后应该得到的活跃值 
set @c = (@dd-@a)/(@a1-@a) 
set @act = power(@grade,2)*(@grade+4) --根据用户当前等级得到活跃值 
set @act=@act+(@b1-@b)*@c --用户新得到的活跃值 
 return @act
end
go
Create procedure ActivityDateSynch 
as 
--关联查找出等级数,用户ID,总消费豆豆数 update b set activity=dbo.getact(a.grade,b.newuserid,a.dd) 
 FROM shop INNER JOIN shitfuck2 ON a.newuserid = b.newuserid 

解决方案 »

  1.   

    update b set activity=dbo.getact(a.grade,b.newuserid,a.dd) 
     FROM shop a INNER JOIN shitfuck2 b ON a.newuserid = b.newuserid 
      

  2.   

    你可以使用function来做.CREATE FUNCTION DDActivity
    @dd int,
    @grade intRETURNS INT
    ASdeclare @a int, @b int, @c int, @a1 int, @b1 int, @act int, @id int 
    --取出豆豆消费上下两条记录 
    select top 1 @id =id,@a=dd,@b=activity from headtitle where dd <@dd order by id desc 
    select top 1 @a1=dd,@b1=activity from headtitle where id>@id 
    --计算升级后应该得到的活跃值 
    set @c = (@dd-@a)/(@a1-@a) 
    set @act = power(@grade,2)*(@grade+4) --根据用户当前等级得到活跃值 
    set @act=@act+(@b1-@b)*@c --用户新得到的活跃值 RETURN (@act)
    ENDCreate procedure ActivityDateSynch 
    as update A
    set A.activity= DDActivity(B.dd, A.grade)
    FROM shitfuck2 A
    INNER JOIN shop B
      ON A.newuserid = B.newuserid 
    GO
    我没仔细检查语法. 抱歉.