有以下两段脚本,第一将时间成成变量进行查询,查询时形成死状。
declare @bbdat varchar(100),@eedat varchar(100)
select @bbdat= '2010-05-07 02:00:00.000'
select @eedat='2010-05-07 23:58:33.600'select uid,amt,dsc='0.00-10.00',1,2 From 
(
select uid=a.uid ,amt=sum(amt-disamt) from possrlbf a,possrldt b 
where a.uid=b.uid and a.shpid=2 and sldat >  @bbdat and sldat < @eedat
 and (flag=1) and b.isdel=0
group by a.uid
) a where  amt between 0.00 and 10.00 第二个将时间直接写在查询中,速度非快,我找不到原因,还请高手给予说明select uid,amt,dsc='0.00-10.00',1,2 From 
(
select uid=a.uid ,amt=sum(amt-disamt) from possrlbf a,possrldt b 
where a.uid=b.uid and a.shpid=2 and sldat >  '2010-05-07 02:00:00.000' and sldat < '2010-05-07 23:58:33.600'
 and (flag=1) and b.isdel=0
group by a.uid
) a where  amt between 0.00 and 10.00 

解决方案 »

  1.   

    改成:declare @bbdat datetime,@eedat datetime
      

  2.   

    用函数进行查询,已解决但不明白其中的原因
    SET QUOTED_IDENTIFIER ON 
    GO
    SET ANSI_NULLS ON 
    GOALTER      function dbo.aaa (@bbdat varchar(100),@eedat varchar(100) )returns tableas
      return
      (select uid,amt,dsc='0.00-10.00',dscuid=1,shpid=2 From 
    (
    select uid=a.uid ,amt=sum(amt-disamt) from possrlbf a,possrldt b 
    where a.uid=b.uid and a.shpid=2 and sldat >  @bbdat and sldat < @eedat
     and (flag=1) and b.isdel=0
    group by a.uid
    ) a where  amt between 0.00 and 10.00 ) GO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO