我明白你的意思,因为我做的和你做的是一模一样
呵呵, 我做医疗管理系统,多人并发录入后,生成收费单据号码
就是象你这样的 199905250001......... :-D
我在一个小库里放一条记录, 这个小库专门保存 19990525 0001 中的0001
这个序号
每一个操作员在录入的时候使用一个存储过程,类似下面
客户端:
var id: String;
try
database1.starttransaction; //启动事务
storedproc1.execproc; //执行存储过程得到一个序号
id:= format('0.4d',[storedproc1.Parambyname('result').AsInteger]); //格式化为 0001, 0002 这样的字符串
storedproc2.parambyname('@id').AsString:=id;
storedproc2.parambyname('@xx').AsInteger:=......;
.........;
storedproc2.ExecProc; //存储过程2 写真正的数据保存入库
database1.commit; //确认事务
except
database1.rollback; //如有异常,回滚整个事务,两个存储过程做的
//改动都不会生效
end;
存储过程里
第一个存储过程 取序号
declare @id_count int
update dbo.idcount set id=id+1 /* 先将序号加1 */
select @id_count=id from dbo.idcount /* 得到序号 */
return @id_count
第二个存储过程 写真实数据 传入参数有刚才生成的'0001'
declare @id_str char(12)
select @id_str= convert(char(8),getdate(),112) + @id
/* 由当前时间生成 '19990524' 这样的字符后再和'0001'相加 */
insert into............... values(@id_str,.....)