declare @smsnum as varchar(10)
declare @smsnum_1 as varchar(10)
declare @smsnum_2 as varchar(10)declare @smmnum_p as char(28)
declare @smmnum_c as char(28)set @smsnum=Convert(varchar(6),dateadd(mm,0,getdate()),112) 
set @smsnum_1 = 'S'+@smsnum + '01' set @smsnum=Convert(varchar(6),dateadd(mm,1,getdate()),112) 
set @smsnum_2 = 'S'+@smsnum + '01' select  top 1 @smmnum_p=smsnum from sc22.abc.dbo.sms_201001 order by smsnum descif @smmnum_p is null 
begin
  --首次复制对私短信(本月)
insert into sc2.abc.dbo.sms_201001
   ([smsnum]
   ,[smb_num]
   ,[smsid]
   ,[smsmobcou]
   ,[smsmobare]
   ,[smsmobpho]
   ,[smsencode]
   ,[smsbody]
   ,[smsoper]
   ,[smsretry]
   ,[smstxdt]
   ,[smsstat]
   ,[smspaybch]
   ,[smspaycli]
   ,[smstmp_cusid]
   ,[smstmp_cusname]
   ,[smstype]
   ,[smsrelcli]) 
select 
[smsnum]
           ,[smb_num]
           ,[smsid]
           ,[smsmobcou]
           ,[smsmobare]
           ,[smsmobpho]
           ,[smsencode]
           ,[smsbody]
           ,[smsoper]
           ,[smsretry]
           ,[smstxdt]
           ,[smsstat]
           ,[smspaybch]
           ,[smspaycli]
           ,[smstmp_cusid]
           ,[smstmp_cusname]
           ,[smstype]
           ,[smsrelcli] 
 from SC1.abc.DBO.smmsgoffline  where smsnum > @smsnum_1
   end
else
begin
    insert into sc2.abc.dbo.sms_201001
([smsnum]
           ,[smb_num]
           ,[smsid]
           ,[smsmobcou]
           ,[smsmobare]
           ,[smsmobpho]
           ,[smsencode]
           ,[smsbody]
           ,[smsoper]
           ,[smsretry]
           ,[smstxdt]
           ,[smsstat]
           ,[smspaybch]
           ,[smspaycli]
           ,[smstmp_cusid]
           ,[smstmp_cusname]
           ,[smstype]
           ,[smsrelcli]) 
select  [smsnum]
           ,[smb_num]
           ,[smsid]
           ,[smsmobcou]
           ,[smsmobare]
           ,[smsmobpho]
           ,[smsencode]
           ,[smsbody]
           ,[smsoper]
           ,[smsretry]
           ,[smstxdt]
           ,[smsstat]
           ,[smspaybch]
           ,[smspaycli]
           ,[smstmp_cusid]
           ,[smstmp_cusname]
           ,[smstype]
           ,[smsrelcli] 
from SC1.abc.DBO.smsoffline where smsnum > @smmnum_p
end
我想将上面sql中的 sms_201001 用变量取代后面的日期时间,(sms_201001是表名,建立规则是sms_<年份月份>)由于我需要每月定时运行,因此需要将 后面的部分以变量实现,
(上述两个 sc1 和 sc2 是两台数据库服务器的连接名称,这两项是可用的。)

解决方案 »

  1.   


    declare @tablename varchar(2000)
    exec('insert into sc2.abc.dbo.'+@tablename+' ([smsnum]
                   ,[smb_num]
                   ,[smsid]
                   ,[smsmobcou]
                   ,[smsmobare]
                   ,[smsmobpho]
                   ,[smsencode]
                   ,[smsbody]
                   ,[smsoper]
                   ,[smsretry]
                   ,[smstxdt]
                   ,[smsstat]
                   ,[smspaybch]
                   ,[smspaycli]
                   ,[smstmp_cusid]
                   ,[smstmp_cusname]
                   ,[smstype]
                   ,[smsrelcli]) 
            select 
                [smsnum]
               ,[smb_num]
               ,[smsid]
               ,[smsmobcou]
               ,[smsmobare]
               ,[smsmobpho]
               ,[smsencode]
               ,[smsbody]
               ,[smsoper]
               ,[smsretry]
               ,[smstxdt]
               ,[smsstat]
               ,[smspaybch]
               ,[smspaycli]
               ,[smstmp_cusid]
               ,[smstmp_cusname]
               ,[smstype]
               ,[smsrelcli] 
    ...
      

  2.   


    请问条件那里怎么加呢?主要是变量里面出现的单引号,好象嵌套出问题了我加入如下:Set @condition = 'smm_num >= "S20100101"'。。exec('insert into sc2.abc.dbo.'+@tablename+' ([smsnum]
    ...+ @condition )出现如下错误:Msg 102, Level 15, State 1, Line 39
    Incorrect syntax near '>'.