建议楼主还是用动态SQL来做:create proc viewnew 

@dF datetime, 
@dT datetime, 
@orderby varchar(20) 

as 
begin 
  declare @sql varchar(8000)
  set @sql='Select * From Employee Where RegisterDate between '+conver(varchar(21),@dF,120)+' and '+conver(varchar(21),@dT,120)+' order by '+@orderby
  exec(@sql)
end exec viewnew '2001-01-01','2009-09-09',Emp_Name 

解决方案 »

  1.   


    --try
    create proc viewnew 

    @dF datetime, 
    @dT datetime, 
    @orderby char(20) 

    as begin 
    Select * From Employee Where RegisterDate between @dF and @dT 
    order by @orderby
    end 
      

  2.   

    create proc viewnew 
    @dF nvarchar(10), 
    @dT nvarchar(10), 
    @orderby char(20) 
    as 
    begin 
    declare @sql nvarchar(1000)
    select @sql='select * from Employee where RegisterDate between '''+@dF+''' and '''+@dT+''' order by '+@orderby
    exec(@sql)
    end exec viewnew '2001-01-01','2009-09-09','Emp_Name' 
      

  3.   


    create table employee(id int identity(1,1),RegisterDate datetime,nm varchar(50))
    insert into employee(RegisterDate,nm)
    select '2008-08-08','xx' union all
    select '2008-09-08','yyx' union all
    select '2009-08-08','dfd' create proc viewnew 

    @dF datetime,
    @dT datetime,
    @orderby varchar(50) 

    as begin 
    exec   ('Select * From Employee Where RegisterDate between '''+@dF+''' and '''+@dT+'''  
      order by '+@orderby+'')
    end declare @x datetime,@y datetime,@z varchar(50)
    set @x='2008-08-04'
    set @y='2008-11-12'
    set @z='nm'
    exec viewnew @x,@y,@z
      

  4.   


     ('Select * From Employee Where RegisterDate between '''+@dF+'''…
    我试过了,这句话不可用,要convert的好像
      

  5.   

    测试结果:
    /*
    id          RegisterDate            nm
    ----------- ----------------------- --------------------------------------------------
    1           2008-08-08 00:00:00.000 xx
    2           2008-09-08 00:00:00.000 yyx(2 行受影响)*/
      

  6.   

    可能SQL版本不同,不过我不想用动态的SQL,我想能否不用string ,如果实在不行,就接受大家的意见,散分,咱再等等