代码如下:
  感觉好像存储过程放到报表中后,运行报表时存储过程没有执行?大家帮忙看一下。
Declare @Nyear  int  Set @Nyear=year('2008-06-30')
Declare @Nperiod  int  Set @Nperiod=month('2008-06-30')
--取出自定义期间表中的期间变量 
Declare @Dyear  int  
Set @Dyear=(Select Case when exists(select 1 from t_BosycPeriod2  where fclosed=1) then max(fyear) Else 2008 End as Dyear From t_BosycPeriod2 Where  fclosed=1)
Declare @Dperiod  int  
Set @Dperiod=(Select Case when exists(select 1 from t_BosycPeriod2  where fclosed=1) then max(Fperiod) Else 5 End as Dperiod From t_BosycPeriod2 Where  fclosed=1 and fyear=@Dyear)--PRINT @Dyear
--PRINT @Dperiod  --SELECT * FROM t_BosycIcinvBalInit2   --Update t_BosycPeriod2 Set FClosed=1 Where fyear=2008 and fperiod=5While (@Nyear>=@Dyear)
    
Begin
    If (@Nyear=@Dyear and (@Nperiod-@Dperiod =1 or @Nperiod-@Dperiod=2))
      Begin  --正常按月查询
        Exec sp_BOSStockbalInsertyc @FDate='2008-06-30' 
      End
    Else
      If (@Nyear>@Dyear and (@Nperiod-@Dperiod=-11  or @Nperiod-@Dperiod=-10))
         Begin  --跨年时的算法
           Exec sp_BOSStockbalInsertyc @FDate='2008-06-30'
         End   
      Else
         Begin  --其他都自动跳出
          Break
         End     
   Break
End================
后面是查询存储过程生成的表中数据的代码,省略。

解决方案 »

  1.   

    While (@Nyear>=@Dyear) 
        
    Begin 
        If (@Nyear=@Dyear and (@Nperiod-@Dperiod =1 or @Nperiod-@Dperiod=2)) 
          Begin  --正常按月查询 
            Exec sp_BOSStockbalInsertyc @FDate='2008-06-30' 
          End 
        Else 
          If (@Nyear>@Dyear and (@Nperiod-@Dperiod=-11  or @Nperiod-@Dperiod=-10)) 
            Begin  --跨年时的算法 
              Exec sp_BOSStockbalInsertyc @FDate='2008-06-30' 
            End  
          Else 
            Begin  --其他都自动跳出 
              Break 
            End    
      Break 
    End 
    你循环中没有对 @Nyear或者@Dyear这个进行赋值,没有指定下一次循环的增量。
      

  2.   

    我试过,单独执行这个sp_BOSStockbalInsertyc 时,是执行了的,结果也正确插入到了我指定的表中,但是我在其他报表中调这个过程时,好像就没有执行了。大家帮忙看一下。吃饭去了,做程序真TM辛苦!
      

  3.   

    你循环中没有对 @Nyear或者@Dyear这个进行赋值,没有指定下一次循环的增量。
    要咋整才能呀?我前面已经定义变量并赋值了的呀?对于存储过程是我菜菜的,请帮忙说清楚一点,多谢!
      

  4.   

    你循环的条件是@Nyear>=@Dyear,
    但是在你的循环中,并没有对这其中的任何一个值做修改.
    导致整个循环如果满足条件@Nyear>=@Dyear的话,那么就是个死循环,一直运行,
    如果不满足条件的话,就不执行该循环.
    1.在你的循环中显式地对其中的一个变量进行赋值。
    如 
      SET @Dyear = ??
    2.保证你的初始循环条件(@Nyear>=@Dyear)可以满足,
    这样才有可能进入循环。
      

  5.   

    我的情况是可以满足第二条的。@Nyear始终是大于@Dyear的,@Nperiod始终是大于@Dperiod的写上面的主要目的是对期间进行判断,如我输入的N年度和N期间大于且只大于系统中D期间1或2期就要执行这个存储过程。  是不是我的写发不对,如何写这个判断?要考虑跨年的问题咯。
    头都想痛了。
      

  6.   

    循环没有结束的条件,
    应在最后加上能使@Nyear>=@Dyear条件不成立的语句
    如set @dyear=@dyear+1