再问王寒松(50分)

  • 主题发起人 主题发起人 lvjun99
  • 开始时间 开始时间
L

lvjun99

Unregistered / Unconfirmed
GUEST, unregistred user!
首先感谢你对我的“关于并发输入”的回答。
我再把我的问题描述一下:今天生成的主关键字是S199905240001,
S199905240002,...明天生成的是S199905250001,S199905250002,...
意义是哪一天的第几张单据。
请把你上次回答的问题再详细一点好吗?谢谢!
 
我明白你的意思,因为我做的和你做的是一模一样
呵呵, 我做医疗管理系统,多人并发录入后,生成收费单据号码
就是象你这样的 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,.....)

 
一问一个多礼拜了,怎么没反映?如果搞定,则接受答案,否则,提出异议,谢谢合作
 
接受答案了.
 

<a href=http://www.netbug.net.cn/~delphi/space1.jpg> 利用废题做做连接测试-飞船 </a>
 
后退
顶部