跪求存储过程高手,遇到个难题。。。
请耐心看哦,大牛们看应该不难:
有三个表A和表B,C
表A(订单主表)
A01[订单编号]
-------------
m01
m02
...
表B(订单明细表订单号和产品编号是关键字)
B01[订单编号] B02[产品编号] B03[规格] B04[规格编号]
------------------------------------------------------
m01 p01 15*15
m01 p02 16*16
m01 p03 20*20
表C(规格表,专放产品)
C01[规格编号,自增长] C03[规格] C02[产品编号]
-------------------------------------------
G01 15*15 p01
G02 16*16 p02
简要说一下需求:
需要将下面表C中的规格编号填到订单表A的规格B04字段,存储过程规则是传入一个订单编号A01为参数,然后遍历表B的每一个产品的规格和表C比对,如果发现规格一样的,比如15*15,16*16,则将规格编号G01和G02分别填入到表B的B04字段,如果没有则将新规格和产品编号增加到规格表C中,规格编号自动增长,为了方便写存储过程,这里用一个变量X代替自动获得的自动编号,然后B04字段就更新为X即可。比如20*20这个规格。
表B最终效果如下:
B01[订单编号] B02[产品编号] B03[规格] B04[规格编号]
------------------------------------------------------
m01 p01 15*15 G01
m01 p02 16*16 G02
m01 p03 20*20 G03
...
此时表C为:
C01[规格编号,自增长] C03[规格] C02[产品编号]
-------------------------------------------
G01 15*15 p01
G02 16*16 p02
G03 20*20 p03
存储过程是这样的一个订单号作为参数的:
storeP(@A01 nvarchar(20))
..
..
不知道大家看明白吗,写得有点流水账,呵呵 在线等,有疑问我随时回复。
--TableA
if OBJECT_ID('TableA','u') is not null
drop table TableA
create table TableA
(
A01 nvarchar(20)
)
go
insert into TableA
select 'm01' union all
select 'm02'
--TableB
if OBJECT_ID('TableB','u') is not null
drop table TableB
create table TableB
(
B01 nvarchar(20),
B02 nvarchar(20),
B03 nvarchar(20),
B04 nvarchar(20)
)
go
insert into TableB
select 'm01','p01','15*15',null union all
select 'm01','p02','16*16',null union all
select 'm01','p03','20*20',null
--TableC
if OBJECT_ID('TableC','u') is not null
drop table TableC
create table TableC
(
C01 nvarchar(20),
C03 nvarchar(20),
C02 nvarchar(20)
)
go
insert into TableC
select 'G01','15*15','p01' union all
select 'G02','16*16','p02'
go
--存储过程
--实现了更改B表数据
create proc UpdateTableB
(
@A01 nvarchar(20)
)
as
declare @MaxC01 nvarchar(20)
set @MaxC01=''
update TableB
set B04=isnull(C.C01,(select 'G'+right('0'+convert(nvarchar(2),Max(convert(int,right(C01,2)+1))),2) from TableC))
from TableB B left join TableC C on B.B03 = C.C03 where B01=@A01
go
exec UpdateTableB 'm01'
select *From TableB
--测试结果
--m01p0115*15G01
--m01p0216*16G02
--m01p0320*20G03