推荐方法:使用单独的表来做生成编号的操作
-
SQL code
-
-- 编号表 CREATE TABLE dbo.tb_id( name varchar ( 50 ) -- 业务名称,比如是用于某个表的id 生成的表名 PRIMARY KEY , id int , -- 当前编号 seed int -- 编号增长值 ); GO
使用之前初始化编号表,填入业务以及初始的编号 如:2012081900001 和每次增长的增长值,通常为1
当要取号的时候,取编号表的对应业务编号,并进行update操作来取号
这样编号表中可能只有几行到几十行的数据,数据量很小,取号效率非常高,同时用update 避免了并发去重号的问题
以下附上取号的操作代码供大家参考
-
SQL code
-
-- 取下一个编号的公共存储过程 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 ) ;