仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 936|回复: 7
打印 上一主题 下一主题

[学习教程] MSSQL网站制作之睁开BOM

[复制链接]
飘灵儿 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:35:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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行)
--*/

因此我们看到,这些信息足够让我们对单个操作实现“逆操作”。
蒙在股里 该用户已被删除
沙发
发表于 2015-1-18 20:14:47 | 只看该作者
再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
若相依 该用户已被删除
板凳
发表于 2015-1-23 11:21:27 | 只看该作者
一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。
再见西城 该用户已被删除
地板
发表于 2015-1-31 15:46:54 | 只看该作者
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
变相怪杰 该用户已被删除
5#
发表于 2015-2-6 20:19:48 | 只看该作者
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
若天明 该用户已被删除
6#
发表于 2015-2-18 13:40:05 | 只看该作者
在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。
活着的死人 该用户已被删除
7#
发表于 2015-3-12 22:09:29 | 只看该作者
同样会为索引视图等应用带来麻烦。看看行级和事务级的快照数据放在tempdb中,就能感觉到目前架构的尴尬。
透明 该用户已被删除
8#
发表于 2015-3-20 03:58:50 | 只看该作者
SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2025-3-13 04:33

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表