高分求助,仓库调拨触发器

kingshine 2011-02-19 11:03:10
Create TABLE Product /* 商品表 */
(
Product_ID varchar(26) NOT NULL, /* 商品编号,主键 */
Name varchar(30) NOT NULL, /* 商品名称 */
Dep_ID varchar(6) NOT NULL, /* 仓库编号 ,外键 */
)

Create TABLE Stock /* 库存表 */
(
Stock_ID INT IDENTITY(1,1) NOT NULL, /* 库存编号 , 主键 */
Dept_ID INT NOT NULL, /* 仓库编号, 外键 */
Product_ID INT NOT NULL, /* 商品编号, 外键 */
Quantity int not null, /* 所存数量 */
)

Create TABLE Transfer /* 调拨表 */
(
Trans_ID INT IDENTITY(1,1) NOT NULL, /* 编号 , 主键 */
OrgDept_ID varchar(6) NOT NULL, /* 原仓库编号, 外键 */
DestDept_ID varchar(6) NOT NULL, /* 现仓库编号,外键*/
Trans_Date datetime not null, /* 调拨时间 */
)
当修改商品表的仓库编号时,现实自动修改库存表及插入调拨表,启用事务
1、如原仓库存在该商品库存,数量减一,否则提示错误,退出并回滚
2、如现仓库存在该商品库存,数量加一,否则插入一条库存记录
3、插入一条调拨记录
...全文
103 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
快溜 2011-02-20
  • 打赏
  • 举报
回复
这个需求太那啥了,不如帮你做了项目得了。
pt1314917 2011-02-20
  • 打赏
  • 举报
回复
[code=SQ]

--格式又掉了,重发一下
Create TABLE Product /* 商品表 */
(
Product_ID varchar(26) NOT NULL, /* 商品编号,主键 */
Name varchar(30) NOT NULL, /* 商品名称 */
Dep_ID varchar(6) NOT NULL, /* 仓库编号 ,外键 */
)

Create TABLE Stock /* 库存表 */
(
Stock_ID INT IDENTITY(1,1) NOT NULL, /* 库存编号 , 主键 */
Dept_ID INT NOT NULL, /* 仓库编号, 外键 */
Product_ID varchar(26) NOT NULL, /* 商品编号, 外键 */ -----注意类型与product表一致
Quantity int not null, /* 所存数量 */
)

Create TABLE Transfer /* 调拨表 */
(
Trans_ID INT IDENTITY(1,1) NOT NULL, /* 编号 , 主键 */
OrgDept_ID varchar(6) NOT NULL, /* 原仓库编号, 外键 */
DestDept_ID varchar(6) NOT NULL, /* 现仓库编号,外键*/
Trans_Date datetime not null, /* 调拨时间 */
)
go

create trigger tri_pro on product for update
as
--插入调拨表
insert into transfer select a.dep_id,b.dep_id,getdate() from deleted a, inserted b
where a.product_id=b.product_id

--修改库存表
--将现仓库数量+1
update stock set Quantity=Quantity+1 from stock a,inserted b
where a.dept_id=b.Dep_ID
--将原仓库数量-1
update stock set Quantity=Quantity-1 from stock a,deleted b
where a.dept_id=b.Dep_ID

--插入没有商品库存的库存记录
insert stock select dep_id,Product_ID,1 from inserted a where
not exists(select 1 from Stock where dept_id=a.dep_id and product_id=a.Product_ID)
go

--测试


insert into Product select '001','可乐',1
insert into Product select '002','百事',1
insert into Product select '003','七喜',2
go


update Product set Dep_ID=2 where Product_ID='001'
go

--查看结果
select * from Product
select * from Stock
select * from Transfer

[/code]
pt1314917 2011-02-20
  • 打赏
  • 举报
回复
[code=SQ]Create TABLE Product /* 商品表 */
(
Product_ID varchar(26) NOT NULL, /* 商品编号,主键 */
Name varchar(30) NOT NULL, /* 商品名称 */
Dep_ID varchar(6) NOT NULL, /* 仓库编号 ,外键 */
)

Create TABLE Stock /* 库存表 */
(
Stock_ID INT IDENTITY(1,1) NOT NULL, /* 库存编号 , 主键 */
Dept_ID INT NOT NULL, /* 仓库编号, 外键 */
Product_ID varchar(26) NOT NULL, /* 商品编号, 外键 */ -----注意类型与product表一致
Quantity int not null, /* 所存数量 */
)

Create TABLE Transfer /* 调拨表 */
(
Trans_ID INT IDENTITY(1,1) NOT NULL, /* 编号 , 主键 */
OrgDept_ID varchar(6) NOT NULL, /* 原仓库编号, 外键 */
DestDept_ID varchar(6) NOT NULL, /* 现仓库编号,外键*/
Trans_Date datetime not null, /* 调拨时间 */
)
go

create trigger tri_pro on product for update
as
--插入调拨表
insert into transfer select a.dep_id,b.dep_id,getdate() from deleted a, inserted b
where a.product_id=b.product_id

--修改库存表
--将现仓库数量+1
update stock set Quantity=Quantity+1 from stock a,inserted b
where a.dept_id=b.Dep_ID
--将原仓库数量-1
update stock set Quantity=Quantity-1 from stock a,deleted b
where a.dept_id=b.Dep_ID

--插入没有商品库存的库存记录
insert stock select dep_id,Product_ID,1 from inserted a where
not exists(select 1 from Stock where dept_id=a.dep_id and product_id=a.Product_ID)
go

--测试


insert into Product select '001','可乐',1
insert into Product select '002','百事',1
insert into Product select '003','七喜',2
go


update Product set Dep_ID=2 where Product_ID='001'
go

--查看结果
select * from Product
select * from Stock
select * from Transfer
[/code]
pt1314917 2011-02-20
  • 打赏
  • 举报
回复
[code=SQ]
Create TABLE Product /* 商品表 */
(
Product_ID varchar(26) NOT NULL, /* 商品编号,主键 */
Name varchar(30) NOT NULL, /* 商品名称 */
Dep_ID varchar(6) NOT NULL, /* 仓库编号 ,外键 */
)

Create TABLE Stock /* 库存表 */
(
Stock_ID INT IDENTITY(1,1) NOT NULL, /* 库存编号 , 主键 */
Dept_ID INT NOT NULL, /* 仓库编号, 外键 */
Product_ID varchar(26) NOT NULL, /* 商品编号, 外键 */ -----注意类型与product表一致
Quantity int not null, /* 所存数量 */
)

Create TABLE Transfer /* 调拨表 */
(
Trans_ID INT IDENTITY(1,1) NOT NULL, /* 编号 , 主键 */
OrgDept_ID varchar(6) NOT NULL, /* 原仓库编号, 外键 */
DestDept_ID varchar(6) NOT NULL, /* 现仓库编号,外键*/
Trans_Date datetime not null, /* 调拨时间 */
)
go

create trigger tri_pro on product for update
as
--插入调拨表
insert into transfer select a.dep_id,b.dep_id,getdate() from deleted a, inserted b
where a.product_id=b.product_id

--修改库存表
--将现仓库数量+1
update stock set Quantity=Quantity+1 from stock a,inserted b
where a.dept_id=b.Dep_ID
--将原仓库数量-1
update stock set Quantity=Quantity-1 from stock a,deleted b
where a.dept_id=b.Dep_ID

--插入没有商品库存的库存记录
insert stock select dep_id,Product_ID,1 from inserted a where
not exists(select 1 from Stock where dept_id=a.dep_id and product_id=a.Product_ID)
go

--测试


insert into Product select '001','可乐',1
insert into Product select '002','百事',1
insert into Product select '003','七喜',2
go


update Product set Dep_ID=2 where Product_ID='001'
go

--查看结果
select * from Product
select * from Stock
select * from Transfer
[/code]
dawugui 2011-02-19
  • 打赏
  • 举报
回复
[code=SQ]最好给出完整的表结构,测试数据,计算方法和正确结果.否则耽搁的是你宝贵的时间。
如果有多表,表之间如何关联?
[/code]

发帖注意事项
http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧