存储过程中生成ID

/*******************************************************

模块名称: 

模块功能: 生成数据表的关键字值,以输出参数的形式返回。

参数说明:  @id需生成的关键字段变量。

*******************************************************/

CREATE procedure [dbo].[SP_DB_NEWID] (@id varchar(20) out)
as
begin
 set nocount on
 declare @year integer,
  @month integer,
  @day integer,
  @hour integer,
  @minute integer,
  @second integer,
  @ms integer,
  @now datetime
 declare @ts varchar(30)
 declare @tmpTable table (ts timestamp, i integer)
 
 insert @tmpTable (i) values (1)
 select @ts = convert(varchar(30), convert(bigint, ts)), @now = getdate()
 from @tmpTable where i = 1
 select @year = datepart(year, @now),
  @month = datepart(month, @now),
  @day = datepart(day, @now),
  @hour = datepart(hour, @now),
  @minute = datepart(minute, @now),
  @second = datepart(second, @now),
  @ms = datepart(millisecond, @now)
 
 select @id = right('00' + cast(@year % 100 as varchar(20)), 2) +
   (case
    when @month < 10 then str(@month, 1)
    else char(ascii('A') + @month - 10)
   end) +
   (case
    when @day < 10 then str(@day, 1)
    else char(ascii('A') + @day - 10)
   end) +
   (case
    when @hour < 10 then str(@hour, 1)
    else char(ascii('A') + @hour - 10)
   end) +
   right('00' + cast(@minute as varchar(20)), 2) +
   right('00' + cast(@second as varchar(20)), 2) +
   right('00' + cast(@ms as varchar(20)), 3) +
   right('00000000' + @ts, 8)
end
 

posted @ 2011-03-23 14:34  冰 鱼  阅读(661)  评论(0编辑  收藏  举报