1
CREATE PROCEDURE P_GetHId
2
(
3
@len int, --长度
4
@str varchar(10), --前缀
5
@tableName varchar(20), --表名
6
@tableFild varchar(20) --字段名
7
)
8
AS
9
BEGIN
10
SET NOCOUNT ON
11
declare @stra varchar(20)
12
declare @sql varchar(800)
13
14
set @stra='0000000000000000000'
15
set @len=@len-len(@str)
16
17
set @sql='
18
declare @fId varchar(50)
19
set @fId=''0''
20
select top 1
21
@fId='+@tableFild+' from '+@tableName+'
22
order by '+@tableFild+' desc'
23
set @sql=@sql+'
24
select '''+@str+'''+left('''+@stra+''','+cast(@len as varchar(2))+'-len(right(
25
@fId,'+cast(@len as varchar(2))+')+1))
26
+cast(right(@fId,'+cast(@len as varchar(2))+')+1 as varchar(50))'
27
exec(@sql)
28
end
29
GO
30
CREATE PROCEDURE P_GetHId 2
(3
@len int, --长度4
@str varchar(10), --前缀5
@tableName varchar(20), --表名6
@tableFild varchar(20) --字段名7
)8
AS9
BEGIN10
SET NOCOUNT ON11
declare @stra varchar(20)12
declare @sql varchar(800)13

14
set @stra='0000000000000000000'15
set @len=@len-len(@str)16

17
set @sql='18
declare @fId varchar(50)19
set @fId=''0''20
select top 1 21
@fId='+@tableFild+' from '+@tableName+'22
order by '+@tableFild+' desc'23
set @sql=@sql+'24
select '''+@str+'''+left('''+@stra+''','+cast(@len as varchar(2))+'-len(right(25
@fId,'+cast(@len as varchar(2))+')+1))26
+cast(right(@fId,'+cast(@len as varchar(2))+')+1 as varchar(50))'27
exec(@sql)28
end29
GO30

调用 exec P_GetHId 10,'PN','表名','字段名' 得到结果为 PN00000001 开始递增