declare  @rq1  datetime  ---起始日期    
    declare  @sj   int 
    set  @sj=19550100
    print @sj 
    set @rq1=convert(datetime,cast(@sj as varchar(23)),121)  //  这句出错
    print @rq1    hlzh_p_singlgcjyl是存储过程   出错原因:
   消息 242,级别 16,状态 3,过程 hlzh_p_singlgcjyl,第 32 行
   从 varchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值。

解决方案 »

  1.   

    按理,int 所代表的时间并非"年-月-日",如果楼主一定要这样表示,可以考虑作一转换:
    declare @rq1 datetime ---起始日期   
      declare @sj int  
      set @sj=19550100
      set @sj=(case when @sj/100*100=@sj then @sj+1 else @sj end)
      print @sj  
      set @rq1=convert(datetime,cast(@sj as varchar(23)),121) --// 不出错了
      print @rq1
      

  2.   

    declare @rq1 datetime ---起始日期   
      declare @sj int  
      set @sj=19550101
      print @sj  
      set @rq1=convert(datetime,cast(@sj as varchar(23)),121) 
      print @rq1