代码如下:
感觉好像存储过程放到报表中后,运行报表时存储过程没有执行?大家帮忙看一下。
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================
后面是查询存储过程生成的表中数据的代码,省略。
感觉好像存储过程放到报表中后,运行报表时存储过程没有执行?大家帮忙看一下。
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================
后面是查询存储过程生成的表中数据的代码,省略。
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这个进行赋值,没有指定下一次循环的增量。
要咋整才能呀?我前面已经定义变量并赋值了的呀?对于存储过程是我菜菜的,请帮忙说清楚一点,多谢!
但是在你的循环中,并没有对这其中的任何一个值做修改.
导致整个循环如果满足条件@Nyear>=@Dyear的话,那么就是个死循环,一直运行,
如果不满足条件的话,就不执行该循环.
1.在你的循环中显式地对其中的一个变量进行赋值。
如
SET @Dyear = ??
2.保证你的初始循环条件(@Nyear>=@Dyear)可以满足,
这样才有可能进入循环。
头都想痛了。
应在最后加上能使@Nyear>=@Dyear条件不成立的语句
如set @dyear=@dyear+1