一个自动编号的问题???,请帮忙写个存储过程.(200分)

  • 主题发起人 主题发起人 小草
  • 开始时间 开始时间

小草

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个表表名 CPRK(产品入库单)
有一个字段 RKDBH(入库单编号)
要求: RKDBH 自动编号
原则 每月26号至次月26为一个周期
如果是2002年4月,就200204*0001、200204*0002按下自动编号
大家需要注意9月至10月区分
 
我也想知道 
 
我说一下思想,请看一下:
首先取系统时间,分析取得年份、月份、日期,
对日期作判断:(你的周期是不是这个意思?)
(1)26号之后,则月份+1(若这时月份为13则年份+1,月份-12),
编号前7位就是:年份+月份+‘*’
(2)26号之前(包括26号),则编号前7位就是:年份+月份+‘*’
(注:单月要处理一下,前面添‘0’)

后四位可以数据库中已经存在的编号自动生成,
这个编号还需要分解一下
取数据库与前面生成的前7位编号相似的最大的一个编号,取得后四位,转成int类型
然后+1,在转回去就是了
这样前7位与后4位加在一起就是一个新的编号。

 
呵呵,这个就是我实现的!:)
 
这是一个例子,自己分析

档案号的格式: 四位年+两位月+两位日+四位档案号
即:200202260001
档案编号表:记录当前最新的档案编号,只有一个记录.为了防止记录 出现重复的情况.
CREATE PROCEDURE prGetNo --产生按年月日排列的档案号
@No varchar(12) output ---为产生的档案号
AS
declare @Year Int,
@Month int,
@Day int,
@Temp_No varchar(12),
@NeedNo varchar(4) --档案号
BEGIN
select @year=Year(GetDate())
select @Month=Month(GetDate())
select @Day=Day(GetDate())
select @No=Str(@Year,4,0)+
(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)
SELECT @Temp_No = 档案编号 FROM 档案编号表
IF @No <> SUBSTRING( @Temp_No,1,8)
SELECT @No = @No+'0001'
ELSE
BEGIN
SELECT @RandNo = STR(CONVERT(int,(SUBSTRING( @Temp_No ,9,4))+1),4,0)
SELECT @RandNo = REPLACE( @RandNo,' ','0')
SELECT @No = @No + @RandNo
END
UPDATE 档案编号表
SET 档案编号 = @No
END
END
 
别人给的函数,不防看看。
function Tdata1.autoid(sfield, stable: string): string;
var query:tadoquery;
str1,str2:string;
begin
str1:=formatdatetime('yyyymmdd',date);
query:=tadoquery.Create(application);
query.Connection :=connection;
query.Close;
query.sql.clear;
query.sql.add('select ' +sfield+ ' from '+stable +' where mid('+sfield+',3,8)=:v_date order by '+sfield +'');
query.Parameters.ParamByName('v_date').value:=str1;
query.open;
if query.Eof then
result:=str1+'001'
else
begin
query.Last;
str2:=copy(query.fieldbyname(sfield).asstring,11,3);
if length(trim(inttostr(strtoint(str2)+1)))>1 then
result:=str1+'0'+inttostr(strtoint(str2)+1)
else
result:=str1+'00'+inttostr(strtoint(str2)+1);
end;
query.Free;
end;
 
接受答案了.
 
后退
顶部