问题二:帮我看看这语句,老是提示出错:
begin tranDECLARE @random_num  integer , 
@read_date varchar(10)select @random_num = 10
select @read_date = '2003-12-05'exec ('select top ' + @random_num  + ' * from print_insert where convert(char(10),cp_r_day,20) = '+ @read_date + ' order by newid()')总是说“将 varchar 值 '2003-12-05' 转换为数据类型为 int 的列时发生语法错误。”
为什么呢

解决方案 »

  1.   

    问题一:改成这样效率会高些:
    select * from print_insert where cp_r_day >= '2003-12-05 00:00:000' and cp_r_day <='2003-12-06 00:00:000'
      

  2.   

    1:select * from print_insert where cp_r_day = '2003-12-05'就可以
    2:exec ('select top ' + cast(@random_num as varchar(5))  + ' * from print_insert where convert(char(10),cp_r_day,20) = '+ @read_date + ' order by newid()')
      

  3.   

    1:写错了,1楼对 用between也可以
      

  4.   

    exec ('select top ' + @random_num  + ' * from print_insert where convert(char(10),cp_r_day,20) = '''+ @read_date + ''' order by newid()')
      

  5.   

    --这样写效率高一些:
    select * from print_insert where datediff(day,cp_r_day,'2003-12-05')=0--或者:
    select * from print_insert where cp_r_day>='2003-12-05' and cp_r_day<'2003-12-06'
      

  6.   

    我想再请问一下
    你好,我是请教语句优化的那个,
    我想再请问一下,现在这句语句又要如何写呢begin tran DECLARE @random_num  integer  ,  @get_random_num integer , @read_date  char(10)
    exec ('select '+ @random_num + '  = count(cp_tno) from print_insert where convert(char(10),cp_r_day,20) =  ''' +@read_date+ ''' and  cp_month_page = cp_total_page')现在提示是说"第 1 行: '=' 附近有语法错误。"
      

  7.   

    exec ('select '+ @random_num + '  = count(cp_tno) from print_insert where convert(char(10),cp_r_day,20) =  ''' +@read_date+ ''' and  cp_month_page = cp_total_page')这句是什么意思?要给@random_num赋值吗?
    那直接用
    exec ('select  @random_num  = count(cp_tno) from print_insert where convert(char(10),cp_r_day,20) =  ''' +@read_date+ ''' and  cp_month_page = cp_total_page')这句是什么意思?要给@random_num赋值吗?
      

  8.   

    不好意思,copy的时候把最后一句也copy过来了