USE [TSMISData]
GO
/****** Object:  StoredProcedure [dbo].[ontime]    Script Date: 09/28/2012 10:55:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[ontime] 
                         @begintime datetime,
                         @endtime datetime,
                         @ontmie_day int
as 
declare @ERROR varchar(60)
declare  @tbl table(id int identity(1,1) primary key , dayname varchar )
begin 
 if len(@begintime)=0 or LEN(@endtime)=0
   begin
     set @ERROR='输入的日期时间不能为空'
   end
  if ISDATE(@begintime)=0 or ISDATE(@endtime)=0
     begin
      set @ERROR='您输入的时间格式有误!'
      return 1
    end 
  else
     begin 
        while @begintime>@endtime
         begin
          insert @tbl(dayname)values(@begintime);
          set @begintime=@begintime+1;
         end
     end 
   select @ontmie_day=COUNT(dayname) from @tbl where dayname not in ('星期六','星期日') 
   return  @ontmie_day 
end
意图是算出给出时段排除周末的天数!

解决方案 »

  1.   

    ALTER proc [dbo].[ontime] 
                             @begintime datetime,
                             @endtime datetime,
                             @ontmie_day int output
      

  2.   

    你前端要怎么使用的?
    ALTER proc [dbo].[ontime] 
                              @begintime datetime,
                              @endtime datetime,
                              @ontmie_day int
     as 
     declare @ERROR varchar(60)
     declare  @tbl table(id int identity(1,1) primary key , dayname varchar )
     begin 
      if len(@begintime)=0 or LEN(@endtime)=0
        begin
          set @ERROR='输入的日期时间不能为空'这些地方你都没有返回,set来干嘛?
        end
       if ISDATE(@begintime)=0 or ISDATE(@endtime)=0
          begin
           set @ERROR='您输入的时间格式有误!'同上
           return 1
         end 
       else
          begin 
             while @begintime>@endtime
              begin
               insert @tbl(dayname)values(@begintime);
               set @begintime=@begintime+1;
              end
          end 
        select @ontmie_day=COUNT(dayname) from @tbl where dayname not in ('星期六','星期日') 红字哪里也可以去掉
        return  @ontmie_day 这个可以不用
     end
    我感觉你这个用一个表值函数来实现就可以了
      

  3.   

    你究竟要输出什么信息?看你的存储过程,既有错误代码,又有表变量,还有@ontmie_day int参数,你是要全部都输出?
    改成这样试试:ALTER proc [dbo].[ontime] 
    @begintime datetime,
    @endtime datetime,
    @ontmie_day INT OUTPUT -- -1表示您输入的时间格式有误,-2表示输入的日期时间不能为空,大于0表示有记录
    as 
    begin 
    declare  @tbl table(id int identity(1,1) primary key , [dayname] varchar ) if len(@begintime)=0 or LEN(@endtime)=0
    begin
    set @ontmie_day = -2
    RETURN
    END

    if ISDATE(@begintime)=0 or ISDATE(@endtime)=0
    begin
    set @ontmie_day = -1
    RETURN
    end 
    else
    begin 
    while @begintime>@endtime
    begin
    insert @tbl(dayname) values(@begintime);
    set @begintime=@begintime+1;
    end
    END

    select @ontmie_day=COUNT(dayname) from @tbl where [dayname] not in ('星期六','星期日') 
    end全部都可以使用一个输出参数:@ontmie_day INT OUTPUT,然后前台根据返回值来输出不同的信息给使用者,比如我这里就是-1表示您输入的时间格式有误,-2表示输入的日期时间不能为空,大于0表示有记录。
      

  4.   

    把需要输出的变量(存储过程的参数)加output