create proc test
@a datetime(10),@b datetime(10)
as
select * from 表 
where 日期 between isnull(@a,CONVERT(CHAR(10),GETDATE(),102)) and isnull(@b,@a)
go

解决方案 »

  1.   

    @B默认为1
    if @b=1 exec getdate()
    else set @b=@a
      

  2.   

    没有默认值的proc执行时必须输入参数。
      

  3.   

    2楼的有点问题
    我改了一下create proc test
    @a datetime=null,@b datetime=null
    as
    declare @a1 datetime
    declare @b1 datetime
    set @a1=isnull(@a,CONVERT(CHAR(10),GETDATE(),102))
    set @b1=isnull(@b,@a)
    select * from dat_j1fb 
    where xtrq between @a1 and @b1
    go可是现在在执行不带参数的时候,还是有问题
    请教高人了
      

  4.   

    create proc test
    @a datetime=null,@b datetime=null
    as
    set @a=isnull(@a,CONVERT(CHAR(10),GETDATE(),102))
    set @b=isnull(@b,@a)
    select * from dat_j1fb where xtrq between @a and @b
    go自己解决了
    谢谢楼上所有朋友
      

  5.   

    --楼主看看下面的效果是你想要的吗?
    create table dat_j1fb(id int, xtrq datetime)
    insert dat_j1fb select 1, '2005-8-8'
    union    all    select 2, CONVERT(CHAR(10),GETDATE(),102)
    go
    create proc test
    @a datetime=null,@b datetime=null
    as
    set @a=isnull(@a,CONVERT(CHAR(10),GETDATE(),102))
    set @b=isnull(@b,@a)
    --select a=@a, b=@b
    select * from dat_j1fb 
    where xtrq between @a and @b
    go
    --运行
    exec test
    exec test @a='2005-8-8'
    exec test @a='2005-8-7', @b='2005-8-10'
    --清除
    drop proc test
    drop table dat_j1fb
      

  6.   

    总的来说是一个简单的问题,就是给变量设默认值,并在过程开始的时候马上对变量进行判断,if 变量=默认值
     ...
    else
     ...比如系统过程sp_helpdb