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 |
|