|
楼主 |
发表于 2008-9-13 23:10:00
|
显示全部楼层
说明一下:
右边表格里数据分两部份, 上面是对应数据表间存在约束键值的, 下面是无约束但存在关键字段名相同的数据表.
范例:
针对U86X, 现存量表CurrentStock 和存货档案表Inventory 是存在外键约束的.
所以前一版本1002可以自动更新现存量表对应的存货编码.
但到了U87X, 用友数据库结构调整, 取消了该外键约束, 为什么取消, 我不知道.
但存货档案编码如果进行了调整, 那也必须同步调整现存量表里面的存货编码.
现在除了存在约束的数据自动更新, 同时增加非约束数据表间同名字段同步更新.
那样才不会出现现存量表存货编码因未调整倒致报表数据错误.
需要注意的是, 更新操作前千万记住数据账套备份. 免得因设置或者操作不当倒致损失.
针对问题"此工具进行存货档案编码更新后,物料清单中不能查询新编码了;"
刚才查了一下数据结构.
物料清单主表: bom_bom
物料清单母件: bom_cbom -> ParentId 母件物料ID
物料清单子件: bom_opcomponent -> ComponentId 子件物料Id
对应: bas_part物料表 -> PartId 编号
关联到: InvCode 存货编码
可惜就是这个字段与默认存货编码cInvCode不相同, 而且又不存在编码约束.
只能想办法增加约束,更新完编码后, 再删除该约束了.
所以可以先通过SQL查询分析器, 手工加上一个外键约束:
Alter TABLE [bas_part]
Add FOREIGN KEY
(
[InvCode]
) REFERENCES [Inventory] (
[cInvCode]
)
更新完编码后, 再删除该约束:
ALTER TABLE dbo.bas_part
DROP CONSTRAINT FK__bas_part__InvCod__639A063E
注意该约束名,不尽相同.所以得通过系统表找到约束名,才能删除: 或者通过企业管理器直接找到数据表的字段设计,直接删除外键也可.
下面是通过系统表, 找约束的脚本.
--找出外键约束关系
select b.name As ConstName, c.name As ConstTable, d.name As ConstFkTable,e.name As ConstField,f.name As ConstFkField, a.keyno As ConstSpace
From sysforeignkeys a
Left Join sysobjects b On a.constid = b.id
Left Join sysobjects c On a.fkeyid = c.id
Left Join sysobjects d On a.rkeyid = d.id
Left Join syscolumns e On a.fkeyid = e.id And e.colid = a.fkey
Left Join syscolumns f On a.rkeyid = f.id And f.colid = a.rkey
--主表的系统ID
Where a.rkeyid=(select Id From sysobjects Where name='Inventory')
--主表字段的系统ID
And a.rkey=(select colid From syscolumns Where name='cInvCode'
And ID=(select Id From sysobjects Where name='Inventory'))
--外键约束表名
And c.name='bas_part'
Order By c.name
[ 本帖最后由 yifeng651 于 2008-10-21 21:19 编辑 ] |
|