用友T3系统管理报错不能插入重复键行,提示:运行时错误‘-2147217873(80040e2f)’ 不能在具有唯一索引‘csub_id’的对象‘dbo.UA_Tasklog’中插入重复键行,图文详细处理流程
[全站通告] 想快速节省您的时间并可接受付费的朋友,可扫右边二维码加博主微信-非诚勿扰!
【问题现象】
打开系统管理提示:运行时错误‘-2147217873(80040e2f)’ 不能在具有唯一索引‘csub_id’的对象‘dbo.UA_Tasklog’中插入重复键行。见下图:
【原因分析】
打开系统管理报错,考虑是由于系统库异常造成的,提示中有出现表UA_Tasklog,所以判断是该表异常导致报错。UA_Tasklog是站点网络控制表,与其相关的还有功能操作网络控制表UA_Task。
【解决方案】
以下有四种解决方案可参考:
方案一:删除表内容
由于是站点网络控制表UA_Tasklog异常,一般该表的内容是可以清空的,操作前请做好数据备份,如果没有做正常备份,请做好物理数据备份(备份T3安装路径下的admin文件夹,路径:安装的本地磁盘\Ufsmart\admin),对系统库执行语句“delete from ua_tasklog”
方案二:重建系统库
因为 UA_TASK 和 UA_TASKLOG都在系统库中,重建系统库,可以重建表。所以做好了数据备份的情况下,可以考虑重建系统库,重建系统库后重新恢复账套。
重建系统库,需要删除注册表项,操作步骤如下:
(1)【开始】-【运行】-输入“regedit”- 依次找到
[HKEY_LOCAL_MACHINE\SOFTWARE\UFSoft\UF2000\2.0\Setup]
(2)右击Setup删除。
方案三:drop表,重建表
由于是站点网络控制表UA_Tasklog异常,,可以考虑直接删除表UA_Tasklog,然后使用创建表脚本重建。请参照以下步骤:
(1)使用Drop命令删除表UA_Tasklog,提示存在关联关系的表不能删除。
(2)所以需要先删除ua_task ,再删除ua_tasklog
(3)重建表,需要使用创建表脚本。在T3软件安装路径下有创建系统库的模板文件ufsystem.bak
,可以使用该文件(ufsystem.bak)强制还原到某个数据库中,然后查询、复制创建表的脚本。具体操作步骤如下:
A.登入数据库企业管理器
B.右击【数据库】点击【新建】,新建数据库123。
C.右击【数据库】,选择【还原数据库】,在【常规】页,目标数据库选择123,点击【源设备】,选择系统库模板文件ufsystem.bak
D. 在【选项】页选择【覆盖现有数据库】,将系统库模板文件还原到数据库123中
E.还原完成后,进入数据库“123”中,找到表UA_task,右击表UA_task,选择【编写脚本为】-【CREATE到】-【新查询编辑器窗口】,查看创建表表UA_task的脚本,并全选复制
F.选择系统库UFSystem,执行创建表UA_task的脚本
G.找到表UA_tasklog,右击表UA_tasklog,选择【编写脚本为】-【CREATE到】-【新查询编辑器窗口】,查看创建表UA_tasklog的脚本,并全选复制
H.选择系统库UFSystem,执行表UA_tasklog的创建脚本
方案四:删除约束,重建表
无法删除表’ua_tasklog’,是因为该表正由一个FOREIGN KEY 约束引用,所以可以删除约束,然后重建表。请参照以下步骤操作:
A.先执行以下语句查询约束
select fk.name,fk.object_id,OBJECT_NAME(fk.parent_object_id) as referenceTableName
from sys.foreign_keys as fk
join sys.objects as o on fk.referenced_object_id=o.object_id
where o.name=’ua_tasklog’
B.再依次点击表UA_Task-键,右击约束“FK__UA_Task__cTaskId__4E88ABD4
”选择删除。
C.删除约束后,可删除表UA_Tasklog
D.删除表UA_Tasklog后,可参照本文当中的方案三重建表UA_Tasklog,但是重建表之后不会重写已删除的约束FK__UA_Task__cTaskId__4E88ABD4,一般不影响软件使用。