select *  from table1 where datediff(@OrderDateType,DateAndTime,getdate())报datediff指定错误参数?
为什么不能用@参数代替?语法有问题吗?

解决方案 »

  1.   

    用动态SQL 或用分支判断语句
      

  2.   

    declare @OrderDateType varchar(10)
    select @OrderDateType = 'mm'
    exec('select *  
    from table1 
    where datediff('+@OrderDateType+',DateAndTime,getdate()) =1')
      

  3.   

    declare @OrderDateType varchar(10)
    select @OrderDateType = 'mm'
    if @OrderDateType = 'mm'
    select *  
    from table1 
    where datediff(mm,DateAndTime,getdate()) =1
    else if ...
     ....
      

  4.   

    select *  from table1 where datediff(@OrderDateType,DateAndTime,getdate()) 你的 @orderDateType 是字串变量
    而datediff的参数是标识符. 所以错误.比如正确的应该是
    datediff(dd,dateAndTime,getdate())
    而你的写法会产生
    datediff('dd',dateAndTime,getdate())
    这样的,所以是错的.因为 datediff的第一个参数是内置标识代码,不支持变量或计算.
    用if 分支或动态语句.
      

  5.   

    @OrderDateType 是由asp 传递过来的参数。这里还能重新定义吗?
    用参数的目的是因为datediff 类型是由asp 传过来的参数决定。
      

  6.   

    不能为参数指定变量,组成动态SQL执行吧
      

  7.   

    用 set @str='select * from table datediff('+@OrderDateType+',Dv_Topic.DateAndTime,getdate())=@num'set @str='select * from table datediff('+@OrderDateType+',Dv_Topic.DateAndTime,getdate())='+ CONVERT(nvarchar,@num) +'@num 由asp 传递过来,这两种写法都报错,说@num要定义,我在存储过程已经定义了 
    @num int
    怎么回事?
      

  8.   

    set @str='select * from table datediff('+@OrderDateType+',Dv_Topic.DateAndTime,getdate())='+ltrim(@num)