我自己写的程序,客人要求表单能够自动生成临时编号和正式编号(临时编号就是在表单没有审核前一直用,到了审核后就转用正式编号).按我以前的经验就建立一个界面让他们自己的人去定那个生成这两个编号的规则(就是包含有编号开始字母,是否使用年份月份日期和流水号的位数)例如
开始字母:PRO
年份:2009 或者09
月份:12
日期:12
流水号的位数: 6
所以我现有的系统里面今天自动产生的临时编号是(临时编号开始字母全是Temp)
临时编号:Temp20091212000001
正式编号:PRO20091212000001
到了明天自然是
临时编号:Temp20091212000001
正式编号:PRO20091213000001
但是现在它要求正式编号应该连续的,应该正式编号:PRO20091213000002
到了后天开始字母改成CPM了,年份只用09了,流水好的位数为4位了,那么正式编号应该是CPM0912120003
我记得淘宝网的单号好象也是这样的!,请问这个过程该怎么样写?
开始字母:PRO
年份:2009 或者09
月份:12
日期:12
流水号的位数: 6
所以我现有的系统里面今天自动产生的临时编号是(临时编号开始字母全是Temp)
临时编号:Temp20091212000001
正式编号:PRO20091212000001
到了明天自然是
临时编号:Temp20091212000001
正式编号:PRO20091213000001
但是现在它要求正式编号应该连续的,应该正式编号:PRO20091213000002
到了后天开始字母改成CPM了,年份只用09了,流水好的位数为4位了,那么正式编号应该是CPM0912120003
我记得淘宝网的单号好象也是这样的!,请问这个过程该怎么样写?
解决方案 »
- 聚集与非聚集索引共存
- 这个SQL语句绝没超长,不能执行,什么毛病?
- 如何查询指定位置的记录
- sql达人请进,关于字段内容的替换
- 全文检索问题--高分求教
- 有选择性的WHERE条件怎么写,请高手赐教!!!!!
- 请高手指点,veryvery感谢
- 请教toad 高手!!??(分数要多少给多少)
- 当建立好一个表后,如果我用SQL语句去动态的改变某个int型字段的自增长属性,这条SQL语句该怎么写或者能不能实现?谢谢各位高手指点
- 'select' 附近有语法错误。
- 错误提示:SqlDumpExceptionHandler: Process 9 generated fatal exception c000008e
- 怎么用存储过程把网络服务器的数据库导入本地数据库?
数据库里有编号字段
BH00001
BH00002
BH00003
BH00004
如何实现自动增长 --下面的代码生成长度为8的编号,编号以BH开头,其余6位为流水号。
--得到新编号的函数
CREATE FUNCTION f_NextBH()
RETURNS char(8)
AS
BEGIN
RETURN(SELECT 'BH'+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6) FROM tb WITH(XLOCK,PAGLOCK))
END
GO--在表中应用函数
CREATE TABLE tb(
BH char(8) PRIMARY KEY DEFAULT dbo.f_NextBH(),
col int)--插入资料
BEGIN TRAN
INSERT tb(col) VALUES(1)
INSERT tb(col) VALUES(2)
INSERT tb(col) VALUES(3)
DELETE tb WHERE col=3
INSERT tb(col) VALUES(4)
INSERT tb(BH,col) VALUES(dbo.f_NextBH(),14)
COMMIT TRAN--显示结果
SELECT * FROM tb
/*--结果
BH col
---------------- -----------
BH000001 1
BH000002 2
BH000003 4
BH000004 14
--*/ create table tb
(id int identity,
name varchar(10),
code as 'BH'+right('0000'+cast(id as varchar),5))
go
insert tb(name) select 'A'
union all select 'B'
union all select 'C'
union all select 'D'select * from tbdrop table tb/*
id name code
----------- ---------- ------------
1 A BH00001
2 B BH00002
3 C BH00003
4 D BH00004(所影响的行数为 4 行)
*/
如果有一天是从4位升到6位了就出问题拉!
好象今天的使用的规则是PMC200912120009 --[PMC开头4位年份2位月份2位日期4位流水号]
到了明天它使用的规则是CPT091213000010 --[CPT开头2位年份2位月份2位日期6位流水号]
现在就是想从今天的的结果如何得到明天的规则改变的,后尾为连续的编号!
CTP200912140002 (前面11位流水号4位0002)
200912000003 (前面6位流水号6位000003)
CTP2009120004 (前面9位流水号4位0004)
CTP2009121400005 (前面11位流水号5位000005)
CTP09120006 (前面7位流水号4位0006)
xxxxxxx00007 (前面x位流水号5位00007) 我如何得到下一个前X位流水号为00007的编号呢?