--下面的代码生成长度为8的编号,编号以BH开头,其余6位为流水号。
--得到新编号的函数
CREATEFUNCTION f_NextBH()
RETURNSchar(8)
AS
BEGIN
RETURN(SELECT'BH'+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6) FROM tb WITH(XLOCK,PAGLOCK))
END
GO
--在表中应用函数
CREATETABLE tb(
BH char(8) PRIMARYKEYDEFAULT dbo.f_NextBH(),
col int)
--插入资料
BEGINTRAN
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)
COMMITTRAN
--显示结果
SELECT*FROM tb
/*--结果
BH col
---------------- -----------
BH000001 1
BH000002 2
BH000003 4
BH000004 14
--*/
另一种写法;带条件的
CREATE PROCEDURE P_CreateCaseNum
@UnitID int
AS
declare @CaseNum char(10)
BEGIN
if exists(select * from T_CreateCaseNum where UnitID=@UnitID)
begin
update T_CreateCaseNum set CaseNum=right('000000'+ltrim(convert(int,CaseNum)+1),6) where UnitID=@UnitID
set @CaseNum=(select CaseNum from T_CreateCaseNum where UnitID=@UnitID)
select @CaseNum
return
end
else
begin
insert into T_CreateCaseNum(UnitID,CaseNum) values(@UnitID,'000001')
set @CaseNum=(select CaseNum from T_CreateCaseNum where UnitID=@UnitID)
select @CaseNum
return
end
END
GO
ID unitid casenum
1 1 00001
1 2 00004
1 3 00003