SQL如何创建一个自增的字符串字段呢?
想要实现的效果如下:
[申请编号]: ABC140400001
解析:[申请编号]为字段名称,ABC为自定义前缀,1404为日期字符串即14年4月,00001为自增计数
然后想要每个月置计数,即到5月份后再重新开始从1自增计数
- -搜索了下,得到提示要自己创建一个函数,并关联到字段
但是我自己老是失败,求解答,万分感谢!
我的做法:
参照网上的别人的函数在[可编程性]/[函数],右键新建函数
CREATE FUNCTION [dbo].[f_NextBH]()
RETURNS char(8)
AS
BEGIN
RETURN(SELECT 'BH'+RIGHT(1000001+ISNULL(RIGHT(MAX([申请编号]),6),0),6) FROM [table] WITH(XLOCK,PAGLOCK))
END

- -然后完全不是自己想的那样额,是函数写错了麽?还是方法错了额?

------解决方案--------------------
drop table tb
create table tb (申请编号 varchar(20))
go
Alter FUNCTION [dbo].[f_NextBH]()
RETURNS char(13)
AS
BEGIN
RETURN(SELECT 'ABC'+ substring (Cast(year(getdate())as varchar(4)),3,2) + substring(Convert(Varchar(10), GetDate(), 120),6,2)+RIGHT(100001+ISNULL(RIGHT(MAX([申请编号]),6),0),6) FROM tb WITH(XLOCK,PAGLOCK))
END
go
select * from tb
go
select [dbo].[f_NextBH]()
有的地方不是很完美,给你参考下
------解决方案--------------------
这个是我之前写的一个自动获取单号的存储过程,LZ可以参考一下喔.
单号格式: "MS"+2位年+2位月+2位日+4位流水号
create proc dbo.pro_getNewBillno
as
begin
set nocount on
declare @h int, @ybillNO varchar(50)
select @h=max(cast(right(ybillNO,4) as int))+1 from dbo.t_salesHeader (nolock)
where ybillNO like 'MS'+substring(convert(varchar,getdate(),112),3,8)+'%'
select @ybillNO='MS'+substring(convert(varchar,getdate(),112),3,8)
+case when @h is null then '0001' else replicate('0',4-len(@h))+rtrim(@h) end
select @ybillNO 'ybillNO'
end
go
------解决方案--------------------
cast 可以去掉
create table test(编号 nvarchar(20))
DECLARE @Sequence varchar(5)
SET @Sequence = RIGHT(
(
SELECT MAX(编号)
FROM test
WHERE 编号 LIKE 'ABC'+ replace(substring(convert(varchar(100),GETDATE(),121),3,5),'-','') + '%'
),
5
)
IF @Sequence IS NOT NULL
BEGIN
insert test values('ABC'+replace(substring(convert(varchar(100),GETDATE(),121),3,5),'-','')+right(cast(power(10,5) as varchar)+convert(int,@Sequence)+1,5))
END
ELSE
BEGIN
insert test values('ABC'+replace(substring(convert(varchar(100),GETDATE(),121),3,5),'-','')+'00001')
END
select * from test
/*
ABC140400001
ABC140400002
ABC140400003
ABC140400004
ABC140400005
ABC140400006
*/