日期:2014-05-17  浏览次数:20672 次

sql 2000 数据库问题求教高手指导
现在有一个数据会按照日期每天生成一个表,例如从2013年10月1日开始到2013年10月31日, 每天会生成一个以日期命名的表 ,表名为YC20131001,YC20131001,YC20131002,YC20131003...YC20131031。
问题:
    我如何在数据库的作业中,定期删除前一个月份的表。例如到了11月份我要删除YC20131001,YC20131001,YC20131002,YC20131003...YC20131031等表。目前想在数据的作业当中自动删除前一个月的表。
    补充:
     或者有其他的方法可以定期删除这些日期命名的表,求高手指点,谢谢!!!
数据库 sql 数据 表操作

------解决方案--------------------

-- begin
use [数据库名]

declare @tabname varchar(50),@tsql varchar(100)

declare ap scroll cursor for
select 'YC'+convert(varchar,ds,112) 'tabname' from
(select dateadd(d,number,
                stuff(
                  convert(varchar,dateadd(d,-1,
                    stuff(convert(varchar,getdate(),111)
                    ,9,2,'01')),111)
                ,9,2,'01')) 'ds'
 from master.dbo.spt_values
 where type='P' and number<=32
) t
where datediff(m,t.ds,getdate())=1

open ap
fetch first from ap into @tabname

while(@@fetch_status<>-1)
begin
  if exists(select 1 from sysobjects where xtype='U' and name=@tabname)
  begin
   select @tsql='drop table '+@tabname
   exec(@tsql)
  end
  fetch next from ap into @tabname
end

close ap
deallocate ap
-- end


-- 注: 获取上月所有表名
select 'YC'+convert(varchar,ds,112) 'tabname' from
(select dateadd(d,number,
                stuff(
                  convert(varchar,dateadd(d,-1,
                    stuff(convert(varchar,getdate(),111)
                    ,9,2,'01')),111)
                ,9,2,'01')) 'ds'
 from master.dbo.spt_values
 where type='P' and number<=32
) t
where datediff(m,t.ds,getdate())=1

/*
tabname
--------------------------------
YC20130901
YC20130902
YC20130903
YC20130904
YC20130905
YC2013090