求 sybase中删除前5个月的数据的语句!!本人很菜,查了好多资料也没有头绪,求助!!
delete table tablename where TimePoint < dataadd(day,-10,getdate())这个是删除前十天的数据,格式对不对??前5个月应该怎么写呢??这样写对不对呢?
delete table tablename where TimePoint < month(dateadd(month, -5, getdate()))
谢谢大家了!!
[ 本帖最后由 baiducc2000 于 2009-2-13 09:52 编辑 ] dateadd(mm, -5, getdate()) delete table tablename where TimePoint < month(dateadd(mm, -5, getdate()))
是这样的吗?? 把表结构贴出来帮你写,呵呵 你最好把表结构贴出来,别整的删错了 Columns for Table RPT_TR
Field Name Type
TIME_STAMP Date_Time
RECORD_SOURCE Number
SUBSCRIBER_ID String
PACKAGE_ID Number
SERVICE_ID Number
PROTOCOL_ID Number
SAMPLE_SIZE Number
PEER_IP Number
PEER_PORT Number sybase是一个软件的数据库,软件本身有个清理过期数据的脚本:
如:清理RPT_TR表中100天前的数据:
delete from RPT_TR where TIME_STAMP < dateadd(dd, -100, getdate())
但是这个语句运行时,就会因为log日志溢出导致清理失败。有没有办法让delete不写日志?
不知道应该怎么处理。
现在先用truncate table RPT_TR将整个表清理了 !!
请教各位老大了!! 但是这个语句运行时,就会因为log日志溢出导致清理失败。
这个说明被删除的数据过多,导致log空间满,
可以考虑的办法 一是减少每次删除的数据量,你的要求是删除5个月前的,可以考虑按月删除记录,关键是需要计算一下删除的记录行数以及大概的空间,确认log空间够用。
另外一个方法是将需要留下的数据导入另外一个表备份,然后将原表删除后,将备份的改名,并建立索引的对象。这个方法使用于删除的数据量比保留的数据大很多的情况
回复 #7 baiducc2000 的帖子
delete一定会写日志,多加些日志空间就解决了。也可以用游标循环删除,例如循环10000次,commit一次,这样不会日志就可以不断truncate。 使用while循环,例如每个循环delete 10000条,然后commit.很快就完成了。处理的纪录超过10000以上千万别使用cursor,很慢,用while循环结构快很多。
页:
[1]