您的位置:首页 > 数据库

帮帮我解决一个很头痛的SQL问题

2009-12-17 15:08 197 查看
ALTER Procedure [dbo].[WebLiveCount]
@PCID char(20),
@countFlag int,
@date DateTime,
@AdvID int,
@returnValue int output
AS
Declare @tabName varchar(12),@strSql varchar(8000),
@strSql1 varchar(4000),@strSql2 varchar(4000),
@eDate DateTime
Set @eDate = @date
Set @returnValue = 0

While DateDiff(MM,@date,@eDate) < 120
Begin
Set @tabName ='TDC_'+LTrim(DatePart(yyyy,@date))+'_'+LTrim(DatePart(M,@date))
if Not Exists(SELECT * FROM sysobjects WHERE name = @TabName And Xtype='u')
Begin
Set @date = DateAdd(MM,-1,@date)
Continue
End
--Execute CountTabCreate @Date = @date
Set @strSql ='
IF Exists (select * from ['+@tabName+'] Where PCID ='''+@PCID+''' And AdvID = '+Ltrim(@AdvID)+')
Begin
Declare @Edate DateTime,@Err int
Set @Edate = '''+LTrim(Convert(varchar,@eDate,25))+'''
Set @Err = 0
Begin Transaction
'
Set @strSql1 = ''
Set @strSql2=''

IF @countFlag = 1112
Begin
Set @strSql1 = @strSql1 +'
UpDate['+@tabName+'] Set LiveFlag1=LiveFlag1+1,LiveFlagCount=LiveFlagCount+1,
LastLiveDate=@Edate ,LastSafeDate=@Edate
Where LiveFlag1 = 0 And PCID='''+@PCID+''' And AdvID = '+Ltrim(@AdvID)+'
IF @@Error<> 0 Or @@RowCount <1
Begin
Set @Err = 1
GOTO Error
End

Update ['+@tabName+'] Set LiveFlag0=LiveFlag0+1 Where PCID='''+@PCID+'''
And AdvID = '+Ltrim(@AdvID)+' And DateDiff(dd,InsertDate,@Edate) =0
IF @@Error<> 0 Or @@RowCount <1
Begin
Set @Err = 1
GOTO Error
End

'
Set @strSql2 = @strSql2+'LiveDay0=LiveDay0+1,LiveSum = LiveSum +1'
End
IF @countFlag = 1113
Begin
Set @strSql1 = @strSql1 +'
UpDate['+@tabName+'] Set
SafeFlag0=SafeFlag0+(Case When DateDiff(dd,InsertDate,@Edate) =0
Then 1 Else 0 End
) ,
SafeFlag1=SafeFlag1+1,
SafeFlagCount=SafeFlagCount+1,
LastLiveDate=@Edate ,LastSafeDate=@Edate
Where SafeFlag1 = 0
And PCID='''+@PCID+'''
And AdvID = '+Ltrim(@AdvID)+'
IF @@Error<> 0 Or @@RowCount <1
Begin
Set @Err = 1
GOTO Error
End

'

Set @strSql2 = @strSql2+' SafeDay0=SafeDay0+1,SafeSum = SafeSum +1'
End
IF @countFlag = 1115
Begin
Set @strSql1=''
Set @strSql2 = @strSql2+' SafeDay10=SafeDay10+1,SafeSum1=SafeSum1+1'
End
IF @countFlag = 1116
Begin
Set @strSql1=''
Set @strSql2 = @strSql2+' SafeDay20=SafeDay20+1,SafeSum2=SafeSum2+1'
End

IF @strSql2 <> ''
Begin
Set @strSql = @strSql + ' Update [a] set '+@strSql2+'
,LiveDate = @Edate
from [Web_SetupTotal] as a inner join ['+@tabName+'] as b
on( Datediff(dd,a.CountDate,b.InsertDate) = 0 And a.WebID = b.WebID And a.AdvID = b.AdvID )
Where a.AdvID ='+Ltrim(@AdvID)+'
And b.PCID = '''+@PCID+''' And b.LiveFlag1 = 0;

IF @@Error<> 0 Or @@RowCount <1
Begin
Set @Err = 1
GOTO Error
End
'
End
IF @strSql1 <> ''
Begin
Set @strSql = @strSql + @strSql1
End
Set @strSql = @strSql +'
Commit Transaction
select NULL
Error:
IF @@Error <> 0 Or @@RowCount < 1 Or @Err <> 0
Rollback Transaction
Else
select NULL
End
'
Execute(@strSql)
IF @@RowCount > 0
Begin
Set @date = DateAdd(MM,-120,@date)
Set @returnValue = 1
Break
End
Else
Set @date = DateAdd(MM,-1,@date)
End

为什么当LiveFlag1=1的时候,LiveFlag0还进行加一,LiveFlagCount进行加一
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐