sql数据库一个表定时改名字并创建一个新表

[复制链接]
查看11 | 回复3 | 2015-10-5 21:57:23 | 显示全部楼层 |阅读模式
--复制后删除原来syslogd里面的数据,重新开始另一天的数据存储delete * from syslogd这个用truncate table syslogd 这个效率高点吧 --复制syslogd数据到新表(不知道如何动态获取新创建的表名)oracle里面可以create table test as select * from syslogd 这样创建一个新的表查询速度的问题 新表最好能搞点索引 这样效率可以提升不少。其他的 感觉理论上没什么问题
回复

使用道具 举报

千问 | 2015-10-5 21:57:23 | 显示全部楼层
declare @tbName varchar(100),@sql varchar(2000),@date datetimeselect @tbName = convert(varchar(10),getdate(),120)select @tbName = substring(@tbName,1,4)+substring(@tbName,6,2)+substring(@tbName,9,2)select @sql='select * into syslogd_'+@tbName+' from syslogd'exec(@sql)truncate table syslogd select @date=dateadd(month,-3,getdate())
declare cur cursor for select name from sysobjects where crdate<@date and xtype='U' and name like 'syslogd_'open curfetch next from cur into @tbNamewhile @@fetch_status=0begin
select @sql='drop table '+@tbName
exec(@sql)
fetch next from cur into @tbNameendclose curdeallocate cur 经过测试的,可以用了
回复

使用道具 举报

千问 | 2015-10-5 21:57:23 | 显示全部楼层
1、我觉得表命用这个较好,如果表明有符号或者空格以后查询容易出错SELECT @tbName = replace(replace(replace(convert(varchar(20),getdate(),120),'-',''),' ',''),':','')2、删除的话我这么写,用游标了,其他的不会declare@t varchar(20) ,
@sql varchar(2000) declare Drop_t cursor for select name from sysobjects where PassTime < @D and type='U'Fetch Next From Drop_t into @tWhile (@@Fetch_Status = 0)beginset @sql='drop table '+@t
Exec(@sql)Fetch Next From Drop_t into @tendClose Drop_tDealLocate Drop_t 3、复制数据基本就那样不过好几百万的 不知道慢不
回复

使用道具 举报

千问 | 2015-10-5 21:57:23 | 显示全部楼层
不用那么麻烦吧你试试把数据库里的资料超过6个小时的就把数据导出写成二进制的存到.txt里面不就行了吗。写玩了就把表清一下,让数据库里的资料始终保存6个小时的不就行了吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行