请问各位,怎样利用存储过程实现一个订单,多个商品的入库过程!

刘杰友.互联网产品人
企业官方账号
2008-04-15 03:31:46
本人正开发一商城的后台,现遇到问题向大家求助!
1、人有三个表,一个订单表:Order 一个订单详情表:OrderDetail 一个商品信息表:Product
2、订单表中的字段: ID,OrderNumber(订单号)......
3、商品信息表中的字段:ID,ProductName(商品名)......
4、订单详情表中: ID,OrderID(订单表ID),ProductID(商品表ID)......

例如:
订单编号:20080415I 订单人:Voyage 订单时间:2008-04-15

该订单下的所有商品:

生活用品 热水器 1500 RMB 50 台
生活用品 电冰箱 2500 RMB 5 台
......
提交
当用户点击提交的时候,请问各位存储过程能实现吗? 能帮忙提供解决方案更好,小弟感激不尽!
谢谢!
...全文
468 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
ALTER PROCEDURE P_OrderInput --添加入库单
(
@orderInputNumber varchar, --订单编号
@applyID bigint , --请求方的ID号,直接从页面传ID过来
@targetID bigint , --目标方的ID号,直接从页面传ID过来
@siteID int , --站点ID号, 直接从页面传ID过来
@userID int , --操作人员的ID,直接从页面传ID过来

@orderDetail varchar(5000) --订单中记录的详细商品信息
)
AS
set nocount on

declare @OrderInputID bigint --记录插入订单表头时的ID号
declare @dt Datetime --记录系统时间
set @dt = getdate()

--添加入库单表头信息
insert into T_OrderInput([OrderInputNumber],[ApplyID],[TargetID],[SiteID],[UserID],[State],[DateTime])
values (@orderInputNumber,@applyID,@targetID,@siteID,@userID,0,@dt)

select @OrderInputID = SCOPE_IDENTITY()


--处理订单的详细信息

--第一次拆分
declare @tableOne table
(
[ProductOne] varchar(8000) -- 一条商品详细记录
)
insert @tableOne([ProductOne]) select [SubString] from F_SplitString ('1/20/1/2/4000$1/10/2/2/3500$1/12/3/2/3500','$') --将第一次拆分的结果放入临时表
--select [ProductOne] from @tableOne

--第二次拆分
declare @tableTwo table
(
[A] varchar(20), --第一次被拆分后的字符串
[OrderInputID] varchar(20), --插入订单表头时返回的ID
[ProductID] varchar(20), --产品ID号
[Number] varchar(20) , --产品数量
[SiteID] varchar(20) , --站点ID号
[Prict] varchar(20) --产品总价
)
insert into @tableTwo(A) select [ProductOne] from @tableOne

update @tableTwo
set
[OrderInputID]=left(A,charindex('/',A)-1),
[ProductID]=left(stuff(A,1,charindex('/',A),''),charindex('/',stuff(A,1,charindex('/',A),''))-1),
[Number]=left(stuff(stuff(A,1,charindex('/',A),''),1,charindex('/',stuff(A,1,charindex('/',A),'')),''),charindex('/',stuff(stuff(A,1,charindex('/',A),''),1,charindex('/',stuff(A,1,charindex('/',A),'')),''))-1),
[SiteID]=left(stuff(stuff(stuff(A,1,charindex('/',A),''),1,charindex('/',stuff(A,1,charindex('/',A),'')),''),1,charindex('/',stuff(stuff(A,1,charindex('/',A),''),1,charindex('/',stuff(A,1,charindex('/',A),'')),'')),''),charindex('/',stuff(stuff(stuff(A,1,charindex('/',A),''),1,charindex('/',stuff(A,1,charindex('/',A),'')),''),1,charindex('/',stuff(stuff(A,1,charindex('/',A),''),1,charindex('/',stuff(A,1,charindex('/',A),'')),'')),''))-1),
[Prict]=reverse(left(reverse(A),charindex('/',reverse(A))-1))



--将临时表中的信息插入到T_OrderInput_Detail(订单详情表)中
declare @orderInput int --插入订单表头时返回的ID
declare @number int --产品数量
declare @product int --产品ID号
declare @site int --站点ID号
declare @price int --产品总价
declare @cur1 cursor

set @cur1 = cursor scroll for select [OrderInputID],[ProductID],[Number],[SiteID],[Prict] from @tableTwo
open @cur1
fetch first from @cur1 into @orderInput,@product,@number,@site,@price
while @@fetch_status = 0
begin
insert into T_OrderInput_Detail([orderInputID],[productID],[number],[siteID],[price])
values (cast(@orderInput as int),cast(@product as int) , cast(@number as int) , cast(@site as int) ,cast(@price as int))
fetch next from @cur1 into @orderInput,@product,@number,@site,@price
end
itfutao 2008-04-15
  • 打赏
  • 举报
回复
完全能够实现。存储过程或者c#都可以实现。做为单据存盘必须要用到事务控制。
这个在存储过程或者ADO.net中都可以实现的
fengniumaxi 2008-04-15
  • 打赏
  • 举报
回复
不建议用存储过程,你直接用视图就可以了,都算是临时表吧。
存储过程可以实现。
不知道理解对不对
yourname386 2008-04-15
  • 打赏
  • 举报
回复
可以实现啊!
先保存数据到订单详情表中,然后再保存到订单表中.

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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