作了一个上网日志记录系统,要求保留80天的记录,由于数据量过大,采取了按日期建表的方式存储,如
20070301
20070302
。。
类似这样的表
现在的问题是,我如何删除早于当前日期80天建立的表呢,我写了一个存储过程,只能是每天删除,隔天就删不掉了
如下
declare @tbname varchar(1000)
declare @sql varchar(1000)
set @tbname=convert(varchar(12),DateAdd(dd, -60, getdate()),112)
set @sql='drop table dbo.['+@tbname+']'
if exists(select 1 from sysobjects where Name=@tbname and xtype='U')
begin
exec (@sql)
end
请问如何删除所有早于当前时间建立的表呢,只能在表名上作文章了,因为还有其它的表是不需要删除的,如USERINFO等等
20070301
20070302
。。
类似这样的表
现在的问题是,我如何删除早于当前日期80天建立的表呢,我写了一个存储过程,只能是每天删除,隔天就删不掉了
如下
declare @tbname varchar(1000)
declare @sql varchar(1000)
set @tbname=convert(varchar(12),DateAdd(dd, -60, getdate()),112)
set @sql='drop table dbo.['+@tbname+']'
if exists(select 1 from sysobjects where Name=@tbname and xtype='U')
begin
exec (@sql)
end
请问如何删除所有早于当前时间建立的表呢,只能在表名上作文章了,因为还有其它的表是不需要删除的,如USERINFO等等
解决方案 »
- 帮助这个sql,急
- 关于用SQL Server连接到Oracle的问题
- 无法打开默认数据库,登录失败是什么原因?
- 求解!!java 连接 sqlserver2005 jdbc 问题!在线等待!
- [第一贴] odbc 08001错误 17 53 求解决
- 邹建,看了你在VB下的restore database,能否指点一下以下代码的用处?!
- 在线跪求SQL2000安装出错解决方案!!!
- OpenVMS(半知半解)进来接分
- 一个分类排序问题
- 如何实现退出窗体时释放ADODC数据库连接占有的内存资源?
- 一个查询排行的语句写法!?
- sqlserver2000和sqlserver2005安装在同机器上端口是否可以一样?
然后得到现在的日期.
再判断..删之前的.
CREATE TABLE [20080304] (id int)
GO
SELECT Name FROM Sysobjects WHERE xtype='U'
SELECT name ,id=IDENTITY(INT) INTO # FROM sysobjects WHERE xtype='U'
GO
DECLARE @i INT,@cnt INT,@name VARCHAR(100)
SELECT @i=0,@cnt=@@ROWCOUNT
WHILE @i<=@cnt
BEGIN
SET @i=@i+1
SELECT @name=name FROM # WHERE id=@i
IF ISDATE(@name)=1
BEGIN
IF DATEDIFF(dd,@name,GETDATE())>0
EXEC('DROP TABLE [' + @name + ']')
END
END
GODROP TABLE #
GOSELECT Name FROM Sysobjects WHERE xtype='U'
GO
WHILE @i<=@cnt改为
WHILE @i<@cnt
create table [20080102](id int,name varchar(10))
create table [20080103](id int,name varchar(10))declare @sql varchar(8000)
select @sql=isnull(@sql+' drop table ','')+'['+name+']'
from (select name from sysobjects where type='u' and isdate(name)=1)
tp where name>'2008-01-01'
exec('drop table '+ @sql)