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

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进行加一
posted @ 2009-12-17 15:08  竹子小毅  阅读(269)  评论(0编辑  收藏  举报