declare @smm_num as varchar(10)
declare @smm_num_1 as varchar(10)
declare @smm_num_2 as varchar(10)set @smm_num=Convert(varchar(6),dateadd(mm,0,getdate()),112) 
set @smm_num_1 = 'S'+@smm_num + '01' set @smm_num=Convert(varchar(6),dateadd(mm,1,getdate()),112) 
set @smm_num_2 = 'S'+@smm_num + '01' 
declare @sql_smmsg_is as varchar(2000) 
declare @sql_smmsg_tc as varchar(2000) set @smm_num=Convert(varchar(6),dateadd(mm,0,getdate()),112) set @sql_smmsg_tc= 'Truncate table mpps_21.dbo.smmsg_'  + @smm_num + ';'set @sql_smmsg_is = 'Insert into SC22.mpps_21.dbo.smmsg_' + @smm_num + ' ([smm_num]
           ,[smb_num]
           ,[smm_id]
           ,[smm_mobcou]
           ,[smm_mobare]
           ,[smm_mobpho]
           ,[smm_encode]
           ,[smm_body]
           ,[smm_oper]
           ,[smm_retry]
           ,[smm_txdt]
           ,[smm_stat]
           ,[smm_paybch]
           ,[smm_paycli]
           ,[smm_tmp_cusid]
           ,[smm_tmp_cusname]
           ,[smm_type]
           ,[smm_relcli]) select * from SC21.MPPS.DBO.smmsgoffline 
 where smm_num>= ''S20091115'' and  smm_num< ''S20091117'';'select @smm_num
select @sql_smmsg_isEXECUTE (@sql_smmsg_is, 'SalesData') AT sc22我用检索出来的 @sql_smmsg_is 内容在数据库服库器运行,没有问题,可以 insert,但上述内容运行就出错了,错误如下:Msg 203, Level 16, State 2, Line 96
The name 'Insert into SC22.mpps_21.dbo.smmsg_200911 ([smm_num]
           ,[smb_num]
           ,[smm_id]
           ,[smm_mobcou]
           ,[smm_mobare]
           ,[smm_mobpho]
           ,[smm_encode]
           ,[smm_body]
           ,[smm_oper]
           ,[smm_retry]
           ,[smm_txdt]
           ,[smm_stat]
           ,[smm_paybch]
           ,[smm_paycli]
           ,[smm_tmp_cusid]
           ,[smm_tmp_cusname]
           ,[smm_type]
           ,[smm_relcli]) select * from SC21.MPPS.DBO.smmsgoffline 
 where smm_num>= 'S20091115' and  smm_num< 'S20091117';' is not a valid identifier.

解决方案 »

  1.   

    可是我 smmsgoffline  表并没有标识列阿,而且直接用 @sql_smmsg_is 该变量中存储的内容去执行,是可以插入数据的
      

  2.   


    set @sql_smmsg_is = 'Insert into SC22.mpps_21.dbo.smmsg_' + @smm_num + ' ([smm_num] 
              ,[smb_num] 
              ,[smm_id] 
              ,[smm_mobcou] 
              ,[smm_mobare] 
              ,[smm_mobpho] 
              ,[smm_encode] 
              ,[smm_body] 
              ,[smm_oper] 
              ,[smm_retry] 
              ,[smm_txdt] 
              ,[smm_stat] 
              ,[smm_paybch] 
              ,[smm_paycli] 
              ,[smm_tmp_cusid] 
              ,[smm_tmp_cusname] 
              ,[smm_type] 
              ,[smm_relcli]) select * from SC21.MPPS.DBO.smmsgoffline 
    where smm_num>= ''S20091115'' and  smm_num < ''S20091117''最后那个;'不需要.
      

  3.   

    set @sql_smmsg_is = 'Insert into SC22.mpps_21.dbo.smmsg_' + @smm_num + ' ([smm_num] 
              ,[smb_num] 
              ,[smm_id] 
              ,[smm_mobcou] 
              ,[smm_mobare] 
              ,[smm_mobpho] 
              ,[smm_encode] 
              ,[smm_body] 
              ,[smm_oper] 
              ,[smm_retry] 
              ,[smm_txdt] 
              ,[smm_stat] 
              ,[smm_paybch] 
              ,[smm_paycli] 
              ,[smm_tmp_cusid] 
              ,[smm_tmp_cusname] 
              ,[smm_type] 
              ,[smm_relcli]) select * from SC21.MPPS.DBO.smmsgoffline 
    where smm_num>= ''S20091115'' and  smm_num < ''S20091117'''
      

  4.   

    感谢dawugui ,但还是不行阿~~~
      

  5.   

    smm_num 难道是数值型?'S20091115'是字符串型?你不会犯这个错误吧?
      

  6.   

    先把后面这一句去掉看看where smm_num>= 'S20091115' and  smm_num < 'S20091117';'
    如果行的话,就说明是这里的问题。我发现其中一就是那个冒号,用来做什么的,第二,就是smm_num>= 'S20091115' 这个怎么比较的,字符串怎么可以比较大小的
      

  7.   

    smm_num 在库表中定义是字符型的
      

  8.   


    冒号??在哪,我这边没有发现阿smm_num>= 'S20091115'应该是可以的阿,我们一直都是这样操作的smm_num是 char(28)的,它是一组以日期时间命名的流水如:'S2009111510111201'
    'S2009111510111202'
    'S2009111510111203'我们有用过这类型的比较sql语句