select isnull(max(right(bh,5)),0)+1 newbh from tb
where left(bh,2)='13'
where left(bh,2)='13'
解决方案 »
- 求Delphi下连接 MySQL4·1的成熟方案
- 快疯了,遍历QQ发送消息的窗口 竟然没有写消息界面的句柄?
- TOleContainer 颜色 delphi
- listview 中删除了一项,什么命令可以使剩下的项重新排序呢?
- idftp的DirectoryListing.listformat问题
- 随着数据库的不断增大.程序启动也越来越慢.请教有没有优化的法?
- 请问如何完全清除BackDoor.RBot病毒?
- 如何控制执行顺序?
- 谁有实现文字下标和上标的源代码啊?
- NetMessageBufferSend 这个API在DELPHI的那个单元中有定义,如果没有,请写出DELPHI的API定义原型,如果有个使用例子就更好了!!急用!知道的请进!(70分)
- 大虾请进-----------为什么这个截取图片的代码有问题?
- delphi panel控件 能响应键盘消息吗?
select row_number() over (order by name) as rowid, sysobjects.[name] from sysobjects
select id=IDENTITY(int,1,1), sysobjects.[name] as name into dbo.Test_Table from sysobjects
tempYear,GetValue:string;
begin
ckdbh:=FormatDateTime('yymmdd', Now);
tempyear :=foarmatdatetime('yy',now);// 获得当时的年份
sqltxt := 'select top 1* from [wzck] order by ckid desc ';
openadoquery(dmf.ADOQuery7, sqltxt);
if dmf.ADOQuery7.RecordCount = 1 then
begin
getvalue :=trim(copy(dmf.adoquery7.fieldbyname('ckdh').asstring,0,4); //获得最大值的年份
if getvalue =tempyear then //当时本年的时候
begin
//取出出库单编号,得到后5位的数,加00001,然后和当前日期累加;
ckdbh:=ckdbh+inttostr(StrToInt(RightStr(dmf.ADOQuery7.FieldByName('ckdh').AsString,5))+00001);
end
else //是新年的时候
begin
ckdbh:=ckdbh+'00001';
end;
end;
end;
在并发性很高的情况系max+1模式就会有问题。oracle里有Sequence可用。sqlserver里虽然没有Sequence,但也有牛人经过改造做出相同的功能。自己连接过去看吧http://www.cnblogs.com/heekui/archive/2008/07/24/1250842.html
况且记录数达到百万级别,取max值也是以秒计算的
这种事,最好交给数据库去做,程序控制不了的。
oracle里有Sequence就是专门为解决高并发性导致主键冲突而设计的。