自动编号问题,如何产生这样的编号?
在添加产品编号时:要求编号自动产生。格式为:字母+日期+序号。且时间不同则序号不同。列如:PH07061101,PH07061102
PH07061201
PH07061301
不知道如何判断日期的不同,没有思路,请大家指教,谢谢~!
[解决办法]
给一个给你参考一下
--=============================================
--过程用于为新插入的记录生成编号
--参数说明: @TabName 要插入的表名
-- @FieName 要生成关键字的字段名
-- @PreCode 默认的前缀
--eg:exec NewTableDataNO 'orderm ', 'single_no ', 'AA '
--=============================================
CREATE PROCEDURE [NewTableDataNO]
@TableName varchar(50),
@FieldName varchar(50),
@PreCode varchar(2)
AS
Declare @TmpPreCode varchar(100),@Sql varchar(1000), @NewNo varchar(50), @I varchar(50)
if not exists(select * from tempdb.dbo.sysobjects where Name = '##TmpNewNo ')
Create table ##TmpNewNo(RandF float, NewNo varchar(50))
Set @TmpPreCode = @PreCode
--找当天的最大编号
select @TmpPreCode = @TmpPreCode + CONVERT(char(6), Getdate(), 12), @I = cast(RAND() as varchar(50))
set @sql = 'insert ##TmpNewNo(RandF, NewNo)
select ' + @I + ', isnull(max( ' + @FieldName + '), ' ' ' ') '
+ ' from ' + @TableName
+ ' Where left( ' + @FieldName + ', len( ' ' ' + @TmpPreCode + ' ' ')) = ' ' ' + @TmpPreCode + ' ' ' '
exec(@Sql)
select @NewNo = NewNo from ##TmpNewNo where RandF = @I
delete from ##TmpNewNo where RandF = @I
--生成新的编号
if @NewNo = ' ' set @I = '000 ' else Set @I = right(@NewNo, 3)
set @I = cast(cast(@I as int) + 1 as varchar(3))
set @I = case len(@I) when 0 then '001 ' when 1 then '00 ' + @I when 2 then '0 ' + @I else @I end
select @TmpPreCode + @I
GO
[解决办法]
CREATE PROCEDURE Pro_GetSysBH
@BH varchar(12) output,---编号输出
@TableName Varchar(30),---一个关键字
@UpdateBH Bit
AS
declare @Year Int,
@Month int,
@Day int,
@Today DateTime,
@TbTime DateTime,
@SysBH Int,
@TmpBH VarChar(10)
begin
select @Today=GetDate()
select @TbTime=SysTime,@SysBH=BH from SysBH where TableName=@TableName
if DateDiff(Day,@Today,@TbTime) <0--往日日期判断
begin
update SysBH set BH=1,SysTime=GetDate() where TableName=@TableName
Set @SysBH=1
end
else if DateDiff(day,@Today,@TbTime)> 0--日期大于当前
begin
Set @BH= '-1 '---------------返回错误代码
Return
end
select @Year=Year(@ToDay),@Month=Month(@Today),@Day=Day(@Today)
select @TmpBH=Right(Str(@Year,4,0),2)+(Select Case when @Month> =10 then Str(@Month,2,0)
when @Month <10 then '0 '+Str(@Month,1,0)
end)+
(Select Case When @Day> =10 then Str(@Day,2,0)
When @Day <10 then '0 '+Str(@Day,1,0)
end)
if @SysBH <10 select @TmpBH= @TmpBH+ '00 '+Str(@SysBH,1,0)
else if @SysBH <100 Select @TmpBH=@TmpBH+ '0 '+str(@SysBH,2,0)
else select @TmpBH=@TmpBH+str(@SysBH,Len(@SysBH),0)
if @UpdateBH=1
update SysBH set BH=BH+1,SysTime=GetDate() where TableName=@TableName
select @BH=@TmpBH
return
end
GO