select * from t_itemclass
select * from t_itemdetail--核算项目使用详情横表
select * from t_itemdetailv--核算项目使用详情纵表
关系:
t_itemclass.fitemclassid=t_item.fitemclassid
t_itemdetail.Fx=F+t_itemclass.FitemclassID(t_itemdetail表中表中F1及F1以后的列,
是根据t_itemclass表中的FitemclassID来的)
t_itemdetail.fx=t_item.fitemid
t_itemdetailv.fitemid=t_item.fitemid
--必须存在一条FDETAILid=0的特殊记录,
--FdetailCount:Fdetailid对应的核算项目类别个数
--F+数字表示的Fn列名,分别对应于t_itemclass.FitemclassiD
--在t_itemclass每增加一个核算项目类别,则自动在t_itemdetail表中增加对应的F列;但是当删除核算项目类别时,在t_itemdetail表中的F列不会被删除
--如果要删除,只有手工通过SQL语句来删除:要先删除该列的约束,再删除列,以下是具体删除方法:
alter table t_itemdetail drop constraint DF__t_ItemDetail__F4__0F03239C-- 应该修改为具体的约束名
drop index ix_ItemDetail_5--应该修改为具体的Fitemclassid值
alter table t_itemdetail drop column F5--应该修改为具体的列名
---
--Fx列的默认值=0
---以下所说的Fx代表核算项目类别的使用组合情况
--Fx组合=-1所对应的Fdetailid值,只能被科目表t_account.Fdetailid所使用,不能出现在其他数据表中。
--Fx组合>0所对应的Fdetailid值,不能被科目表t_account.Fdetailid所使用。如果存在,应该将t_account.Fdetailid修改为该列为-1对应的Fdetailid
--FdetailCount:它的值必须是实际的Fx组合个数之和
--在使用时,系统会检查用户所用的Fdetailid对应的Fx组合是否存在,如果不存在,则自动增加。
select * from t_itemdetailv--核算项目使用详情纵表
--必须存在一条FDETAILid=0的特殊记录,
--它是根据t_itemdetail表中的记录生成的
--这个表中只记录Fdetailid,Fitemclassid,fitemid三个字段,它是t_itemdetail表的简单化反映。只反映t_itemdetail表中的有效值,取掉F列为0的信息.
--通过Fdetailid与t_itemDetail表关联
--通过Fitemid 与t_item.Fitemid关联,通过Fitemclassid 与t_item.Fitemclassid关联
select * from t_item where fitemid in (select fitemid from t_itemdetailv where fdetailid=14)
----当t_itemdetail表中的记录不存确时,可以通过以下存储过程来重建:
exec sp_cleanitemdetailv
--在查询报表数据时,系统在是根据t_itemdetailv中的Fitemid来获取核算项目信息的,而不是t_itemdetail
select *from t_itemdetail-- where -1 in (f1,f2,f3,f4,f5,f8)
where fdetailid in (select Fdetailid from t_itemdetailv where fitemid=-1)
select * from t_itemdetail where fdetailid=4
select * from t_itemdetailv where fdetailid=4
delete from t_itemdetailv