日期:2014-05-18  浏览次数:20709 次

关于一个SQL,求思路
有三个表结构
1.配件表,表结构:
---------------------------------------------------
配件ID(自增) 配件型号 总配件数 可分配配件数
---------------------------------------------------
在配件表中,由于可能有不同批次的相同型号的配件入库,因此,在表中可能有N条只是配件ID不同的数据

2.设备表:
这个表结构与问题关系不大,结构不发了,主要是配件表和设备配置表的一个关联表

3.设备配置表:
---------------------------------------------------
ID 配件ID 配件型号 配件数量 设备编号
---------------------------------------------------

在页面中,用户在编辑设备的时候,能够编辑和设备相关的配件,可以新增配件,可以删除配件,可以编辑某个型号的配件数量;新增的话,将相应的配件型号和增加的配件数插入设备配置表,同时加少相应的配件表的可分配数量;删除的话,从设备配置表中删除相应数据,同时增加配件表中的可分配配件数量;编辑某个型号的配件数的时候,同时更新配件表和设备配置表中可分配书字段和配件数量字段
问题:
1.页面上如何处理,求思路
2.数据库中如何处理,求思路

------解决方案--------------------
之前好像有过类似的帖子,帮顶、
------解决方案--------------------
需要3个SP: 新增,修改,删除..
页面程序用ADO.net呼叫存储过程,传入参数,
数据库端执行对应SP,并返回执行结果.
------解决方案--------------------
探讨
其实就是想实现在对设备进行编辑的时候,实现对该设备对应的配件的编辑;实现对配件表,设备配置表的同步操作

------解决方案--------------------
探讨
其实就是想实现在对设备进行编辑的时候,实现对该设备对应的配件的编辑;实现对配件表,设备配置表的同步操作

------解决方案--------------------
因没有详细表结构和业务逻辑,只能给个程序框架,
SQL code

create proc spkd
(@OperateType char(1), -- 操作类型
 @PjId int, -- 配件Id
 @Sl int -- 数量
)
as
begin
 if @OperateType='I' -- 新增
 begin
   insert into 设备配置表 ...
   update 配件表 set 可分配配件数=可分配配件数-@Sl where ...
 end

 if @OperateType='U' -- 修改
 begin
   update 设备配置表 ...
   ...
 end
 
 if @OperateType='D' -- 删除
 begin
   delete from 设备配置表 ...
   ...
 end 
end

------解决方案--------------------
新增的话,将相应的配件型号和增加的配件数插入设备配置表,同时加少相应的配件表的可分配数量;
删除的话,从设备配置表中删除相应数据,同时增加配件表中的可分配配件数量;
编辑某个型号的配件数的时候,同时更新配件表和设备配置表中可分配书字段和配件数量字段

你这里其实已经说的很清楚了,那么存储过程里只要按这个逻辑来写就可以。

对于存储过程里写的东西来看,除了设备,其他两表都是做更新,就是说存储过程只写关于这两个表按照设备来更新的逻辑,设备的新增修改删除都在存储过程外部实现。
------解决方案--------------------
问题1:页面如何处理
设备配件画面可设计为TreeView 第一级为设备结点其后跟有【添加配件】链接
设备下一级为配件结点,各结点其后跟有【编辑】、【删除】链接
当点击设备结点的【添加配件】链接和配件结点的【编辑】链接时,打开配件列表画面。
配件列表画面可设计为GridView,配件的列表信息后添加“残余数”列。在设备增、删、改
配件时,更新其数量。
问题2:数据库中如何处理
最简单就是使用数据库触发器,写好触发器,每次只要进行简单的增、删、改就行。

以上希望能对你有所用。