USE [testmall]
GO
/****** 对象:  StoredProcedure [dbo].[getNumber]    脚本日期: 12/12/2008 11:40:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GOALTER proc [dbo].[getNumber]
@tablename varchar(100),
@id varchar(100),
@column varchar(100),
@value varchar(13) output
as   
     
       declare @number varchar(50)     --存储最大id对应的编号
       declare @sql Nvarchar(2000)     --存储动态sql语句
       declare @time varchar(8)        --存储时间,格式如20080908
       declare @timeLeft varchar(8)    --存储编号前面8位字符,表示时间
       declare @total int              --存储当天的编号总数
       declare @totalStr varchar(8)    --存储当天的编号总数,最多5个字符不足前面补0set @sql=N'SELECT @number='+@column+' from '+@tablename+' where '+@id+' in(select max('+@id+') from '+ @tablename+')'
exec sp_executesql @sql,N'@number varchar(50) output' ,@number output
set @time=CONVERT(varchar(12) , getdate(), 112 )---获取时间字符
if(@number=null or ltrim(rtrim(@number))='')
  set @value=right(@time,6)+'000001'---表示第一条记录
else
  begin
    set @number=substring(@number,charindex('0',@number),12)--获取0后面的12位数字 即格式为080925000001
    set @timeLeft=left(@number,6)
    if(@timeLeft=right(@time,6))--表示同一天,编号递增
      begin
        set @total=cast(Ltrim(substring(@number,7,6)) as int)
        set @total=@total+1
        set @totalStr=right(1000000+@total,6)
        set @value=@timeLeft+@totalStr
      end
------------------------------------------end if-----------------
     else--表示不是同一天,编号从000001开始
begin
  set @value=right(@time,6)+'000001'
end
  end
这是我在项目中用到的编号,请问有什么不好的地方吗,会不会有并发问题