本帖最后由 liujiweijun 于 2011-07-19 13:46:09 编辑

解决方案 »

  1.   

    set @totalLeave = (select cursta from List_vLeaveDetail where id=@ID )其实 select cursta from List_vLeaveDetail where id=@ID  结果就是40如果换成 set @totalLeave =40,就有结果,
    测试下来,就是这个问题,但是原因不晓得
      

  2.   

    select @totalLeave = cursta from List_vLeaveDetail where id=@ID
      

  3.   


    select [dbo].[GetELeaveValidAnnualHours_DWDE]('2011-01-01','0')
      

  4.   

    select [dbo].[GetELeaveValidAnnualHours_DWDE]('2011-07-19','aaad')
      

  5.   


    还是null 如果是  set @totalLeave=40,结果就有数字了
    如果是  set @totalLeave = (select cursta from List_vLeaveDetail where id=@ID )结果就是null
      

  6.   

    set @totalLeave = (select cursta from List_vLeaveDetail where id=@ID )
    因为你传进去的值 通过这个语句得到的结果是null  
    那么 @totalLeave  也是null 
    null +-*/ 任何数 得到的值都是null
    set @shouldleave=((@thismonth-@startleavemonth+1)*@totalLeave)/12  所以最后 return @shouldleave 得到是null;
      

  7.   

    (select cursta from List_vLeaveDetail where id=@ID )
    结果等于40
      

  8.   

    这个得到的是什么Declare @totalLeave int,@ID char
    set @ID='aaad'
    set @totalLeave = (select cursta from List_vLeaveDetail where id=@ID )
    select @totalLeave
      

  9.   

    print 最终结果是对的,但是return回去的就是null用的是sql2008
      

  10.   


    sorry,其实是一样的,我贴代码的时候故意去掉的。不好意思
      

  11.   


    函数刚开始定义那里将  @id 定义为 int  不要定义为字符型然后select @totalLeave = cursta from List_vLeaveDetail where id=@ID
      

  12.   

    select [dbo].[GetELeaveValidAnnualHours_DWDE]('2011-01-01',0)
      

  13.   


    测试下来是null
    @ID char(10)就对了
      

  14.   

    Declare @totalLeave int,@ID char
    set @ID='aaaa'
    select cursta from List_vLeaveDetail where sapid=@ID
    select cursta from List_vLeaveDetail where sapid='aaaa'第一个结果为null
    第二个结果是40,
      

  15.   

    这样呢Declare @totalLeave int,@ID char(10)
    set @ID='aaaa'
    select cursta from List_vLeaveDetail where sapid=@ID
      

  16.   

    那就把function重建一下好了。
      

  17.   

    varchar是有默认长度的 char没有 要指定
      

  18.   

    Declare @totalLeave int,@ID char
    set @ID='aaad'
    set @totalLeave = (select cursta from List_vLeaveDetail where id=@ID )
    select @totalLeave
      

  19.   

    set @totalLeave = (select cursta from List_vLeaveDetail where id=@ID )
    一般没有这么写的吧,你确定后面的select语句会返回值给参数吗?
    要么是set @var=value  或者是 select @var=value(select @var from XX where XXX)