22,209
社区成员
发帖
与我相关
我的任务
分享
--将页面传进来的商品ID和数量放到一张表里,如商品ID表
商品ID表([商品ID],[订购数量])
DECLARE @orderNO varchar(50)
set @orderNO=convert(varchar,getdate())+ceiling(rand()*1000000)
insert into [订单明细表]([ID],[订单号],[价格],[数量])
select a.[ID],@orderNO, a.[商品价格],b.[订购数量]from [商品表] a
inner join [商品ID表] b
on a.[ID]=b.[商品ID]
insert into [订单表]([订单号], [店铺ID], [总金额])
select [订单号],b.[店铺ID],sum(b.[店铺ID]* a.[数量]) from [订单明细表] a
inner join [商品表] b
on a.[ID]=b.[ID]
where [订单号]=@orderNO
group by [订单号],b.[店铺ID]
一个存当前编号的表,和一个取编号的存储过程即可,使用这套机制生成id的业务,只需要在第一次使用之前,先在编号表中初始化一条记录(name不重复),然后后面调用获取编号的存储过程即可
-- 编号表
CREATE TABLE dbo.tb_id(
name varchar(50) -- 业务名称,比如是用于某个表的id 生成的表名
PRIMARY KEY,
id int, -- 当前编号
seed int -- 编号增长值
);
GO
-- 取下一个编号的公共存储过程
CREATE PROC dbo.p_GetID
@name varchar(50),
@id int OUTPUT
AS
SET NOCOUNT ON;
UPDATE dbo.tb_id
SET
@id = id + seed,
id = @id
WHERE name = @name
;
GO
-- 使用之前,先初始化一条数据
INSERT dbo.tb(
name, id, seed
)
VALUES
('test', 0, 1)
;
-- 需要新的id 时,调用公用的存储过程进行获取
DECLARE
@id int
;
EXEC dbo.p_GetID
@name = N'test',
@id = @id OUTPUT
;
SELECT
当前编号 = @id,
需要格式化的话 = 'XS' + RIGHT(1000000 + id, 6)
;