码迷,mamicode.com
首页 > 数据库 > 详细

利用SQL表生成按日期序列的唯一ID

时间:2015-03-09 10:45:08      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

1. 创建一个表,用于存现在最大的ID

SELECT [ID],[PreFix],[Code] FROM [DocumentNO]

2. 增加SP,利用锁表,生成相应的ID

Create PROCEDURE [dbo].[GeneralDocumentNo]
(
 @preFix nvarchar(256),
 @outCode varchar(256) output
)
AS
BEGIN
-- =============================================
-- Author:  xiefs
-- Create date: 2013-12-18
-- Description: 生成系统唯一序列号
-- =============================================
Declare @docNo nvarchar(256),
        @month varchar(10),
        @day varchar(10),
        @no varchar(10),
        @num int ,
        @lenNum int,
        @sql nvarchar(4000),
        @maxCode varchar(256),
        @tableName varchar(256)
 
 SET NOCOUNT ON;
 set @tableName=DocumentNo;
 set @month=CAST(month(getdate())as varchar);
 set @day = CAST(day(getdate())as varchar);
 if(LEN(@month)=1) set @month=0+@month;
 if(LEN(@day)=1) set @day=0+@day;
 
 set @docNo = @preFix+cast(YEAR(getdate()) as varchar)+ @month+@day; 
 set @sql =Nselect top 1 @p=code from +@tableName + WITH(holdlock,tablockx) where CHARINDEX(‘‘‘+@docNo+‘‘‘,code)=1 order by id desc; 
 EXEC sp_executesql @sql,N@p varchar(256) output,@p=@maxCode output ;
 if(@maxCode is null) 
 begin
  set @no=1; 
 end;
 else
 begin
  set @no=CAST((CAST(SUBSTRING(@maxCode,len(@docNo)+1,LEN(@maxCode)) as int)+1) as varchar);  
 end;
 
 set @lennum = LEN(@no);
 set @num =4;
 while @lenNum<4
 begin
 set @lenNum=@lenNum+1;
 set @no=0+@no;
 end
 insert into documentno(Prefix,Code) values(@preFix,@docNo+@no);
 --select @docNo+@no; 
 set @outCode=@docNo+@no;
END

 

利用SQL表生成按日期序列的唯一ID

标签:

原文地址:http://www.cnblogs.com/chinabc/p/4322929.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!