新增文章
文章标题
分类
C#
云星空
K3 BOS
K3 功能
用友
Oracle
python
SQL
MySql
PHP
HTML
script
windows
Access
影视后期
财务
服务
生活
内容
原文链接:https://vip.kingdee.com/article/116231986418582016?productLineId=1&isKnowledge=2&lang=zh-CN 金蝶云星空中的数据表的主键通常情况下不会使用 自动递增ID,而是有一张与其表名相同仅前缀不同的种子表来负责产生 自动递增ID, 例如表 t_bas_voucher,其对应的种子表名为 z_bas_voucher。 当出现类似 以下的错误时,说明种子表可能已损坏(种子值被非法修改、重置等),需要手动修复。 insert into a_Gsf_BarPickEntry (FID,FEntryId) select 100033,100030 数据保存失败,错误提示:违反了 PRIMARY KEY 约束“pk_a_Gsf_BarPickEntry”。不能在对象“dbo.a_Gsf_BarPickEntry”中插入重复键。重复键值为 (100030)。 语句已终止。 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 修复方法: -- 1. 查看报错表的当前种子值,自动修复 dbcc checkIdent('Z_a_Gsf_BarPickEntry', noReSeed) -- 这一步就能修复,无需后面两步 -- 2. 查看报错表的主键最大值 declare @FID bigint select @FID = isnull(max(FEntryId),100001) + 1 from a_Gsf_BarPickEntry select @FID -- 3. 更新种子值(更新前对比第一步和第二步获取的值,如果第一步获取的种子值更大,则无需更新) dbcc checkIdent('Z_a_Gsf_BarPickEntry', reSeed, @FID) 种子表修复后,仍然需要去排查种子表损坏原因: 1. 是否有人为操作种子表? 2. 二开获取内码的方式是否正确?(只允许通过系统提供的 GetSequenceInt32,GetSequenceInt64,GetSequenceString 等方法获取) 星空提供的获取种子值的接口如下: Kingdee.BOS.ServiceHelper.DBServiceHelper.GetSequenceInt32 Kingdee.BOS.ServiceHelper.DBServiceHelper.GetSequenceInt64 Kingdee.BOS.ServiceHelper.DBServiceHelper.GetSequenceString 【调用示例】 获取物料 (基础资料)主表种子值:Kingdee.BOS.ServiceHelper.DBServiceHelper.GetSequenceInt64(ctx,"T_BAS_ITEM",1) 获取物凭证(单据) 主表种子值:Kingdee.BOS.ServiceHelper.DBServiceHelper.GetSequenceInt64(ctx,"T_GL_VOUCHER",1)
返回
保存