本人正开发一商城的后台,现遇到问题向大家求助!
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 台
......
提交
当用户点击提交的时候,请问各位存储过程能实现吗? 能帮忙提供解决方案更好,小弟感激不尽!
谢谢!
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 台
......
提交
当用户点击提交的时候,请问各位存储过程能实现吗? 能帮忙提供解决方案更好,小弟感激不尽!
谢谢!
这个在存储过程或者ADO.net中都可以实现的
(
@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