马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
因此我们的方案中要构造这种逆操作。Event_type增加一种FlashBACK_EVENT。这类操作形式与Query_Event相同,都是简单的SQL语句,只是包含了将数据恢复的操作。
原帖地点
http://community.csdn.net/Expert/topic/3384/3384941.xml?temp=.6640436
-------------------------------------------------------------------------
--测试数据
CREATETABLE[dbo].[BOM_DETAIL](
[PKID][int],--IDENTITY(1,1)NOTNULL,
[BOM_HEAD_PKID][int]NOTNULL,
[CHILDREN_ITEM][int]NOTNULL,
[QTY][decimal](10,0)NOTNULL
)ON[PRIMARY]
CREATETABLE[dbo].[BOM_HEAD](
[PKID][int],--IDENTITY(1,1)NOTNULL,
[MASTER_ITEM][int]NOTNULL,
[QTY][int]NOTNULL,
[VER][char](20)COLLATEChinese_PRC_CI_ASNOTNULL,
[STATUS][nvarchar](10)COLLATEChinese_PRC_CI_ASNOTNULL,
)ON[PRIMARY]
CREATETABLE[dbo].[item](
[item][int],--IDENTITY(1,1)NOTNULL,
[brand][nvarchar](10),
[part_no][nvarchar](10)
)ON[PRIMARY]
insertitemselect1,A,A1
unionallselect2,B,AAAAA
unionallselect3,A,AD
unionallselect4,A,SS
unionallselect5,C,123
unionallselect6,C,AAADSFD
unionallselect7,D,D22
unionallselect8,C,DDDD512
unionallselect9,A,AA3223
unionallselect10,DD,356
insertBOM_HEADselect1,1,1,1,利用中
unionallselect2,3,1,1,利用中
unionallselect3,1,1,2,停用
unionallselect4,6,1,1,利用中
unionallselect5,8,1,1,利用中
unionallselect6,2,1,1,利用中
insertBOM_DETAILselect1,1,2,1
unionallselect2,1,6,2
unionallselect3,2,1,1
unionallselect4,3,4,1
unionallselect5,3,5,1
unionallselect6,4,7,1
unionallselect7,4,8,1
unionallselect8,5,9,1
unionallselect9,5,10,1
unionallselect10,6,6,1
go
/*--表间干系申明
BOM_HEAD表中PKID为一独一值,统一MASTER_ITEM的STATUS只要一举动"利用中",其余都为"停用"(注:是统一MASTER_ITEM),经由过程MASTER_ITEM与表ITEM的ITEM相干联
BOM_DETAIL表中经由过程BOM_HEAD_PKID与BOM_HEAD表相干联,经由过程CHIDERN_ITEM与ITEM表的ITEM相干联
--*/
/*--睁开bom的申明
ITEM为1的物料的BOM构成情形:
到BOM_HEAD表中查找MASTER_ITEM=1ANDSTATUS=利用中
如许能够找到BOM_HEAD表中的PKID=1的纪录
我能够从BOM_DETAIL表中依据BOM_HEAD_PKID=1能够失掉MASTER_ITEM这个物料必要用到
CHILDERN_ITEM分离为2和6的物料;
在BOM_HEAD中MASTER_ITEM值为6而且STATUS=利用中
如许能够到到BOM_HEAD的PKID为4
然后再到BOM_DETAIL中找到BOM_HEAD_PKID=4的纪录,如许就能够发明MASTER_ITEM为6的物料必要用到CHILDERN_ITEM分离为7和8的物料;
在BOM_HEAD中MASTER_ITEM值为8而且STATUS=利用中
如许能够到到BOM_HEAD的PKID为45
然后再到BOM_DETAIL中找到BOM_HEAD_PKID=5的纪录,如许就能够发明MASTER_ITEM为8的物料必要用到CHILDERN_ITEM为9和10的物料;
如许顺次类推
最初要失掉一个类示树状的布局
以下图所示
第一层1brand,part_no
第二层2brand,part_no,qty6brand,part_no,qty
第三层7brand,part_no,qty8brand,part_no,qty
第四层9brand,part_no,qty10brand,part_no,qty
--*/
--睁开bom查询的函数
createfunctionf_bom(
@itemint
)returns@rtable(
itemint,
brandnvarchar(10),
part_nonvarchar(10),
QTYdecimal(10,0),--取自BOM_DETAIL
levelint,--条理
sidvarchar(8000)--排序字段,经由过程这个来排序,能够表现出树形的条理
)
as
begin
declare@lint
set@l=0
insert@rselect@item,brand,part_no,0,@l,right(10000+item,4)
fromitem
whereitem=@item
while@@rowcount>0
begin
set@l=@l+1
insert@rselecti.item,i.brand,i.part_no,d.qty,@l,r.sid+,+right(10000+i.item,4)
fromitemi,BOM_HEADh,BOM_DETAILd,@rr
wherer.level=@l-1
andr.item=h.MASTER_ITEM
andh.STATUS=利用中
andh.PKID=d.BOM_HEAD_PKID
andd.CHILDREN_ITEM=i.item
end
return
end
go
--挪用函数失掉查询了局
select条理=space(level*2)+├─
,item,brand,part_no,qty
fromf_bom(1)
orderbysid
go
--删除测试
droptableitem,BOM_HEAD,BOM_DETAIL
dropfunctionf_bom
/*--测试了局
条理itembrandpart_noqty
---------------------------------------------------
├─1AA10
├─2BAAAAA1
├─6CAAADSFD1
├─7DD221
├─8CDDDD5121
├─9AAA32231
├─10DD3561
├─6CAAADSFD2
├─7DD221
├─8CDDDD5121
├─9AAA32231
├─10DD3561
(所影响的行数为12行)
--*/
因此我们看到,这些信息足够让我们对单个操作实现“逆操作”。 |