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