删除指定帐套的SQL脚本

最近几天一直都在折腾用友ERP年度结转的工作;一个简单的年结工作,没想到却这么地费劲,遇到太多太多的问题了;
本身对ERP只知道点皮毛,在这些问题前,人很是疲惫!
可是问题虽多,但去查找具体的问题点,目前来讲,还是相当有难度的;只有通过反复的检查数据、整理环境等避免年结错误的基本操作入手,其中就难免有新建帐套、删除帐套等一系列举措。
删除帐套时,如果通过”系统管理”工具的备份删除来操作的话,其等待与可操作性都不够人性。
这里分享一段从网上找来的SQL脚本:

USE UFSYSTEM
DELETE UA_ACCOUNT_SUB WHERE CACC_ID='118' 

DELETE UA_Period WHERE CACC_ID='118' 

DELETE UA_Log where CACC_ID='118'

DELETE UA_HoldAuth  where CACC_ID='118'

DELETE UA_Identity  where CACC_ID='118'

DELETE UA_ACCOUNT WHERE CACC_ID='118'

DROP DATABASE UFDATA_118_2011

DROP DATABASE UFDATA_118_2012

DROP DATABASE  UFmeta_118

其中118表示你要删除的帐套号;
另:在作删除帐套前,首先要确保重要数据已作备份,避免引起不必要的损失;
以上SQL脚本,我在虚拟机里测试时,提示”UFDATA_118_2012正在使用,无法删除”,所以在执行以上代码时,最好将“U8应用服务管理器”里相关服务停止掉。


updated: 2022-07-13
时隔多年,再次碰到这个问题;原先电脑上有旧账套数据十分影响,就想一咕噜做个清理;
看看上面的代码,不够理想,不能一次性地删除所有需要删除的数据,所以重新整理两段:

删除各年度帐对应的数据表

use master
	
declare @dbtodelete table(name varchar(50));
declare @databasename varchar(100);
-- 将 ufdata% 和 ufmeta% 替换为自己想要删除的一系列表的关联信息
insert into @dbtodelete select name from sys.databases 
	where name like 'ufdata%' or name like 'ufmeta%';
	
-- select name from @dbtodelete;

while exists(select name from @dbtodelete)
begin
	select top 1 @databasename=name from @dbtodelete;
	if exists(select * from sys.databases where name = @databasename)
	begin
		print 'dropping database: ' + @databasename;
		/* very dangerous,确认好已经做好备份后,再选择执行
		exec('
			use master 
			alter database '+ @databasename +' set single_user with rollback immediate
			drop database '+ @databasename
		);
		*/
		
	end
	delete from @dbtodelete where name = @databasename;
end

删除各年度账对应的其他信息,比如 相关日志

declare @ua_period table(cAcc_Id varchar(50));
declare @period varchar(3)

insert into @ua_period select distinct cAcc_Id FROM [UFSystem]..[UA_Period] 

-- select cAcc_Id FROM @ua_period 

while exists( select cAcc_Id FROM @ua_period 
	) 
begin
	select top 1 @period=cAcc_Id from @ua_period;
	/* very dangerous,确认好已经做好备份后,再选择执行
	DELETE FROM [UFSystem]..[UA_Account_sub] Where cAcc_Id=@period

	DELETE FROM [UFSystem]..[UA_Period] Where cAcc_Id=@period

	DELETE FROM [UFSystem]..[UA_Log] Where cAcc_Id=@period

	DELETE FROM [UFSystem]..[UA_Account] Where cAcc_Id=@period

	DELETE FROM [UFSystem]..[UA_HoldAuth] Where cAcc_Id=@period

	DELETE FROM [UFSystem]..[UA_Identity] Where cAcc_Id=@period
	*/
	delete from @ua_period where cAcc_Id = @period
end

2 thoughts on “删除指定帐套的SQL脚本”

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注