declare @FLD_EnterTime datetime,@FLD_ShopId varchar(20),@HourIndex int
set @FLD_EnterTime ='2011-07-27 00:00:00'
set @FLD_ShopId=1
print @FLD_EnterTimeexec('update T_DayStats  set fld_count=fld_count+ 1 where  FLD_ShopId='+@FLD_ShopId+'+ and FLD_DT < dateadd(d,-1,'+ cast(varchar ,@FLD_EnterTime,100)+')')提示:
消息 102,级别 15,状态 1,第 6 行
'cast' 附近有语法错误。不用动态的时候没有问题~
这到底是什么地方出问题了啊~

解决方案 »

  1.   

    exec内不要用函数,
    把Exec里面的字符串放一变量里,
    然后exec该变量。
      

  2.   

    exec('update T_DayStats set fld_count=fld_count+ 1 where FLD_ShopId='+@FLD_ShopId+'  and FLD_DT < dateadd(d,-1,'''+ cast( @FLD_EnterTime as varchar(100))+''')')
      

  3.   


    declare @sql varchar(4000)
    set @sql = 'update T_DayStats set fld_count=fld_count+ 1 where FLD_ShopId='+@FLD_ShopId+'+ and FLD_DT < dateadd(d,-1,'+ cast(varchar ,@FLD_EnterTime,100)+')'
    exec(@sql)
      

  4.   

    Syntax for CAST:
    CAST (expression AS data_type [ (length ) ] )
      

  5.   


    刚才写的CAST函数错了,现在改正了
    declare @FLD_EnterTime datetime,@FLD_ShopId varchar(20),@HourIndex int,@sql varchar(4000)
    set @FLD_EnterTime ='2011-07-27 00:00:00'
    set @FLD_ShopId=1
    print @FLD_EnterTimeset @sql = 'update T_DayStats set fld_count=fld_count+ 1 where FLD_ShopId='+@FLD_ShopId+' and FLD_DT < dateadd(d,-1,'+ cast(@FLD_EnterTime as varchar(100))+')'
    exec(@sql)
    运行提示:07 27 2011 12:00AM
    消息 102,级别 15,状态 1,第 1 行
    '27' 附近有语法错误。应该是LD_DT < dateadd(d,-1,'+ cast(@FLD_EnterTime as varchar(100))+')' 的时间有点问题啊~
      

  6.   

    declare @FLD_EnterTime datetime,@FLD_ShopId varchar(20),@HourIndex int,@sql varchar(4000)
    set @FLD_EnterTime ='2011-07-27 00:00:00'
    set @FLD_ShopId=1
    print @FLD_EnterTimeset @sql = 'update T_DayStats set fld_count=fld_count+ 1 where FLD_ShopId='+@FLD_ShopId+' and FLD_DT < dateadd(d,-1,'''+ convert(varchar(20),@FLD_EnterTime ,120)+''')'
    exec(@sql)