日期:2014-05-17 浏览次数:20493 次
一个存当前编号的表,和一个取编号的存储过程即可,使用这套机制生成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) ;
------解决方案--------------------
--将页面传进来的商品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]
------解决方案--------------------
我做进销存的时候 数据量比较大,所以在存储过程生成订单号, 然后把要插入数据库的SQL 把单号用特殊字符(用不到的符号)替代 用 replace 把特殊字符替换为你生成的最大编号 然后 存值的话我是用下面这个小例子存的 数据量比较大 所以用 varchar(max)
declare @count varchar(2000)
set @count='111⒛2222⑨111⒛2222'
select
substring (value,0,charindex('⒛',value)) as actid,
substring (value,charindex('⒛',value)+1,len(value)) as sales
from
dbo.SplitToTable(@count, '⑨')