[SQL]统计式更新表
代码
declare @UnitPrice money,
@AdvID int,
@returnValue int
Set @UnitPrice = 11
Set @AdvID = 83
Begin Transaction
Update [a] Set
a.Search_Money = a.Search_Money + b.CountNum * @UnitPrice
from ( select
Count(SIID) as CountMoney,UserName,Convert(varchar,CountDate,23) as CountDate,AdvID,AdvDetailID
Where UnitPrice = 0 And AdvID = @AdvID And IsEffective = 1 Group By UserName,Convert(varchar,CountDate,23),AdvID,AdvDetailID
) as b
left join [AdvCount] as a
ON(a.WebUserName = b.UserName and
a.AdvListID = b.AdvID And a.AdvDetailed = b.AdvDetailID And DateDiff(dd,a.AddTime,b.CountDate) = 0)
IF @@Error <> 0 Or @@rowCount <1 GOTO Error
Update [TDS_SearchDetail] Set UnitPrice = @UnitPrice Where UnitPrice = 0 And AdvID = @AdvID And IsEffective = 1 ;
IF @@Error <> 0 Or @@rowCount <1 GOTO Error
Commit Transaction
Set @returnValue = 1
return
Error:
Set @returnValue = 0
RollBack Transaction
@AdvID int,
@returnValue int
Set @UnitPrice = 11
Set @AdvID = 83
Begin Transaction
Update [a] Set
a.Search_Money = a.Search_Money + b.CountNum * @UnitPrice
from ( select
Count(SIID) as CountMoney,UserName,Convert(varchar,CountDate,23) as CountDate,AdvID,AdvDetailID
Where UnitPrice = 0 And AdvID = @AdvID And IsEffective = 1 Group By UserName,Convert(varchar,CountDate,23),AdvID,AdvDetailID
) as b
left join [AdvCount] as a
ON(a.WebUserName = b.UserName and
a.AdvListID = b.AdvID And a.AdvDetailed = b.AdvDetailID And DateDiff(dd,a.AddTime,b.CountDate) = 0)
IF @@Error <> 0 Or @@rowCount <1 GOTO Error
Update [TDS_SearchDetail] Set UnitPrice = @UnitPrice Where UnitPrice = 0 And AdvID = @AdvID And IsEffective = 1 ;
IF @@Error <> 0 Or @@rowCount <1 GOTO Error
Commit Transaction
Set @returnValue = 1
return
Error:
Set @returnValue = 0
RollBack Transaction
决不做一个程序代码的写手.