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

