用友财务软件U8V10.0以上末级科目修复脚本
最近有客户问了这个问题,今天记录一下,懂得人自然会懂得;
正确食用方法:登陆企业管理器,运行以下SQL语句或者下载txt文件复制运行SQL语句即可
-----备份科目表
SELECT * INTO codebak_hbyb FROM code
-------------10.0 以上末级科目检查
if EXISTS (select * from sysobjects where name='temp_aa' and xtype='u')
drop table temp_aa
select top 0 bend c ,ccode,ccode_name,bend,iyear into temp_aa from code
---------------------------------游标检查末级标志
DECLARE @ccode nvarchar(200), @ccode_name nvarchar(200),@bend nvarchar(200),@iyear nvarchar(20)
,@ccode1 nvarchar(200)
DECLARE ccode_test CURSOR FOR
SELECT ccode,ccode_name,bend,iyear
FROM code
order by iyear,ccode
OPEN ccode_test
FETCH NEXT FROM ccode_test
INTO @ccode,@ccode_name,@bend,@iyear
WHILE @@FETCH_STATUS = 0
BEGIN
set @ccode1=@ccode+'%'
insert into temp_aa
select case when count(*)>1 then 0 else 1 end,
@ccode,@ccode_name,@bend,@iyear from code where ccode like @ccode1 and iyear=@iyear
FETCH NEXT FROM ccode_test
INTO @ccode,@ccode_name,@bend,@iyear
END
CLOSE ccode_test
DEALLOCATE ccode_test
------------------------------------游标检查末级标志
select * from temp_aa where c<>bend -----------查询末级标志不对的科目
----------------更新
if EXISTS (select * from temp_aa where c<>bend)
begin
update c
set c.bend=a.c
from code c inner join temp_aa a on c.ccode=a.ccode and c.iyear=a.iyear
where a.c<>a.bend
end
------------更新
drop table temp_aa --------删除临时表