SQL SERVER存储过程生成字母+数字的编码

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


    需求:根据设备组代码(PC)+递增数字,构成编码,编码中数字必须为三位数,无三位数的,以‘0’占位。

    

    代码如下:

   

--测试数据库准备
use master
go
if exists(select * from dbo.sysdatabases where name='hzf')
drop database hzf
go
create database hzf
go
use hzf
go
--创建测试表
ALTER proc [dbo].[get_new_id] 
    @new_id varchar(16) output,    --生产的编号
    @number int,                --设置编码数字的最大位数
    @group varchar(5)            --编号字母
as
begin

    set @new_id = null
    
    select top 1 @new_id = ID from test_id where id like @group+'%' order by convert(int,RIGHT(id,LEN(id)-len(@group)) ) desc
    
    if @new_id is null
        set @new_id = @group+REPLICATE('0',2)+'1'
    else
        begin
            declare @big varchar(16)
            set @big = convert(int, RIGHT(@new_id,LEN(@new_id)-len(@group)) )+1 
            if @big <100
            begin
                set @big = REPLICATE('0',3-LEN(@big)) + @big
            end
            set @new_id = @group + @big 
        end
    

end

GO

--测试
declare @test int
set @test=1
while(@test<=20)
begin
    declare @new_id    varchar(14)
    exec get_new_id @new_id output,7,'PC'
    insert into test_id values(@new_id)
    set @test = @test+1
end
select * from test_id

 

你可能感兴趣的:(数据库,database,自动编号)