公司内设备管理系统中设备建账功能,功能目的是对新进设备进行记录并入库。其中设备编号一项定义为自己修改(查看之前的设备号,取一个不重复的值来填写),感觉特别麻烦!用存储过程自动生成编码岂不是更效率。
需求:根据设备组代码(PC)+递增数字,构成编码,编码中数字必须为三位数,无三位数的,以‘0’占位。
代码如下:
1 --测试数据库准备 2 use master 3 go 4 if exists(select * from dbo.sysdatabases where name=‘hzf‘) 5 drop database hzf 6 go 7 create database hzf 8 go 9 use hzf 10 go 11 --创建测试表 12 ALTER proc [dbo].[get_new_id] 13 @new_id varchar(16) output, --生产的编号 14 @number int, --设置编码数字的最大位数 15 @group varchar(5) --编号字母 16 as 17 begin 18 19 set @new_id = null 20 21 select top 1 @new_id = ID from test_id where id like @group+‘%‘ order by convert(int,RIGHT(id,LEN(id)-len(@group)) ) desc 22 23 if @new_id is null 24 set @new_id = @group+REPLICATE(‘0‘,2)+‘1‘ 25 else 26 begin 27 declare @big varchar(16) 28 set @big = convert(int, RIGHT(@new_id,LEN(@new_id)-len(@group)) )+1 29 if @big <100 30 begin 31 set @big = REPLICATE(‘0‘,3-LEN(@big)) + @big 32 end 33 set @new_id = @group + @big 34 end 35 36 37 end 38 39 GO 40 41 --测试 42 declare @test int 43 set @test=1 44 while(@test<=20) 45 begin 46 declare @new_id varchar(14) 47 exec get_new_id @new_id output,7,‘PC‘ 48 insert into test_id values(@new_id) 49 set @test = @test+1 50 end 51 select * from test_id