急急急!!清理临时表的时候将固定资产数据也清掉了
金蝶云社区-gaolinsigi
gaolinsigi
0人赞赏了该文章 458次浏览 未经作者许可,禁止转载编辑于2016年08月31日 10:34:09

客户这边6月份的时候检测数据库较大,查询之后发现有很多临时表,按照总部给定的方案进行数据清理,具体方案如下。清理过后固定资产卡片查询时发现好多数据被清楚掉了,有的固定资产原值没了,有的固定资产卡片的费用项目变了,有的卡片预计净残值没了,如附件图所示。cloud 6.0版本。
总部大神能否帮忙看一下是否语句有问题,6.0的时候要有新的执行语句。

6. 统计临时表数量和占用空间统计
可通过下列SQL语句查询和统计可删除的临时表数量:
--临时表数量统计
SELECT count(T.NAME) AS COUNT_DEL
FROM
SYS.TABLES T
WHERE
EXISTS (SELECT 1
FROM
T_BAS_TEMPORARYTABLENAME
WHERE
FTABLENAME = T.NAME
AND (FCREATEDATE <= getdate() - 1
OR FPROCESSTYPE = 1))

如果临时表很多,想统计下临时表占用空间,可使用下面的语句进行统计分析:
-- 查看系统所有临时表占用的总空间
select cast(sum(a.total_pages)*8/1024 as varchar)+' MB' total
from sys.partitions p join sys.allocation_units a on p.partition_id = a.container_id
join sys.tables it on p.object_id = it.object_id
where it.name like 'TMP%'

-- 查询系统中每个临时表占用的空间大小统计
select it.name, cast(sum(a.total_pages)*8 as varchar)+'KB' total
from sys.partitions p join sys.allocation_units a on p.partition_id = a.container_id
join sys.tables it on p.object_id = it.object_id
where it.name like 'tm%'
group by it.name
order by sum(a.total_pages)*8 desc

--删除所有已经标记为需要删除的临时表
declare @sql as varchar(max)
set @sql=''
select @sql=@sql+'drop table '+name+';' from sys.tables u
join T_BAS_TEMPORARYTABLENAME v on u.name=v.FTABLENAME and
( v.FPROCESSTYPE=1 or v.FCREATEDATEexec(@sql);
delete u from T_BAS_TEMPORARYTABLENAME u where
not exists(select 1 from sys.tables where u.ftablename=name );

--建议如果临时表太多,超过1w,使用任务来删除临时表
具体可参考:

https://vip.kingdee.com/article/15875

--清理语句
declare @sql varchar(max)
set @sql='';
with t as
(select top 100 name from sys.tables where create_datedelete from t1 from T_BAS_TEMPORARYTABLENAME t1
join t on t1.FTABLENAME=t.name;
with t1 as
(select top 100 name from sys.tables where create_dateselect @sql=@sql+'drop table '+name+char(13) from t1;
exec(@sql)