公司内设备管理系统中设备建账功能,功能目的是对新进设备进行记录并入库。其中设备编号一项定义为自己修改(查看之前的设备号,取一个不重复的值来填写),感觉特别麻烦!用存储过程自动生成编码岂不是更效率。
需求:根据设备组代码(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