用的是这样循环执行的一个存储过程,但发现有个十分奇怪的问题,循环执行的数据跟 单个执行的不一样,我确定没有执行错误,循环执行的数据完全不是正常的数字,但是要是单个执行就没有问题。难道在存储过程中需要清空变量之类的么?
下面是我用的循环,用的是 [dbo].[PR_everyday_DP_coded]这个存储过程,里面有赋值有函数,有查询有插入,但我总觉得应该不会影响的啊declare @beginDate datetime, @endDate datetime, @tempdate datetime
     set @beginDate = '2013-08-01 00:00:00'
     set @endDate = '2013-08-31 00:00:00' 
     set @tempDate = @beginDate 
     while @tempDate <= @endDate
       begin
    exec  [dbo].[PR_everyday_DP_coded] @tempDate 
 
        set @tempDate = dateadd(day,1,@tempDate)
     end

解决方案 »

  1.   

    declare @beginDate datetime, @endDate datetime, @tempdate datetime
         set @beginDate = '2013-08-01 00:00:00'
         set @endDate = '2013-08-31 00:00:00' 
         set @tempDate = @beginDate 
         while @tempDate <= @endDate
           begin
    print @tempdata
        --exec  [dbo].[PR_everyday_DP_coded] @tempDate 
     
            set @tempDate = dateadd(day,1,@tempDate)
         end
      

  2.   

    你把存储过程PR_everyday_DP_coded里面的参数看看,看看是不是datetime形式的
      

  3.   

    PR_everyday_DP_coded的代码贴出来看看吧
      

  4.   


    declare @beginDate datetime, @endDate datetime, @tempdate datetime
    set @beginDate = '2013-08-01 00:00:00'
    set @endDate = '2013-08-31 00:00:00' 
    set @tempDate = @beginDate 
    while @tempDate <= @endDate
    begin
      --exec  [dbo].[PR_everyday_DP_coded] @tempDate
      select  @tempDate as tempDate
      set @tempDate = dateadd(day,1,@tempDate)
    end有可能参数或者循环次数跟你的不一样
      

  5.   

    存储过程成单天运行没有问题,就是奇怪在这个地方,百思不得其解!!
    里面无非就是 声明变量,然后赋值变量,然后用了两个WITH AS 的临时表,用两个临时表组成一个新的表,把生产新的表插入到数据库。
      

  6.   

    存储过程成单天运行没有问题,就是奇怪在这个地方,百思不得其解!!
    里面无非就是 声明变量,然后赋值变量,然后用了两个WITH AS 的临时表,用两个临时表组成一个新的表,把生产新的表插入到数据库。
      

  7.   


    谢谢,知道是什么原因了。
    里面有一个这样的临时表变量,需要跟根据日期变化。。 有时候我是同时跑其他的数,就把这个日期变化了。
    如果单纯只运行这个循环是没有问题的~
    set @sql='update  dbo.d_user set wt=['+@fragDate_NAME+'_PC_WT]'
    EXEC sp_executesql @sql
      

  8.   


    谢谢,知道是什么原因了。
    里面有一个这样的临时表变量,需要跟根据日期变化。。 有时候我是同时跑其他的数,就把这个日期变化了。
    如果单纯只运行这个循环是没有问题的~
    set @sql='update  dbo.d_user set wt=['+@fragDate_NAME+'_PC_WT]'
    EXEC sp_executesql @sql