再升星送产生自增长ID的存储过程 + 提前庆祝五一黄金周
以下为sql server的存储过程:
create procedure Pro_GenerateID
(
@tableName varchar(50), --要产生递增号的表名
@columnName varchar(50), --要产生递增号的列名
@signID varchar(20) --标记符,如是以G-1,G-2,G-3...形式递增,如果给@signID传递'G-'则返回G-4
)
as
declare @signLength int, --@signID的长度
@strScript varchar(800), --产生递增id的sql字符串
@strIntScript varchar(200) --当前表最大ID号的sql字符串
set @signLength = len(@signID)
select @strIntScript='cast(substring(' + @columnName +
',' + cast((@signLength + 1) as varchar(20)) + ',(select max(len(' + @columnName + ')) from ' + @tableName +')-' +cast(@signLength as varchar(20)) + ') as int)'
select @strScript='select top 1 (''' + @signID + ''' + cast((' + @strIntScript + '+1) as varchar(20))) as id from ' + @tableName + ' where left(' + @columnName + ',' + cast(@signLength as varchar(20)) + ')=''' + @signID + ''' order by ' + @strIntScript + ' desc'
select @strScript='if(exists(select * from ' + @tableName + ' where ' + @columnName + ' like ''' + @signID + '%''))
' + @strScript +'
else
select ''' + (@signID +'1') + ''' as id'
print @strScript
exec(@strScript)
如果在ccc表中没有数据
执行此存储过程:exec Pro_GenerateID 'ccc','c1','G-'
显示结果为:
id
------
G-1
(返回 1 行)