CSLY001 这种唯一自增编号是怎么自动生成的吗

huyong19781 2010-11-30 06:43:59
CSLY001 这种唯一自增编号是怎么自动生成?
前面是公司或产品的缩写,后面的数字,数字要自增,不知道有什么好的方法。

我现在想着就是从代码中获取公司或产品的缩写,再加上数据表中的自增列,最后合并成一个字段,但是这样的话就有一列没有意义的数据。出现两个唯一列
...全文
150 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
全栈深入 2010-12-02
  • 打赏
  • 举报
回复
没有测试,大概就这样生成了
select 'CSLY'+ convert(varchar(5),max(Convert(int,substring(column,4))) + 1) from table
huyong19781 2010-12-02
  • 打赏
  • 举报
回复
有谁能帮忙解决吗?
huyong19781 2010-12-01
  • 打赏
  • 举报
回复
不是光显示一下就可以,要保存起来的
huyong19781 2010-12-01
  • 打赏
  • 举报
回复
不行噢 我那个个是有意义的,要存起来
加油馒头 2010-11-30
  • 打赏
  • 举报
回复
。。你想的办法 是对的

不要死脑筋 把那个 CSLY001 作为一个字段。。。

这样通用性也不好(如果公司产品名称变了,要变编码怎么办?全部更新?)

我的建议的是,你在库里放个自增字段就看可以了,然后显示的时候 在动态加上去
select 'cls'+id from t 这样不就好了

为什么要两个字段?
品铭工作室 2010-11-30
  • 打赏
  • 举报
回复
@Tag char(1)='' ,
改为: @Tag char(4)='' ,
品铭工作室 2010-11-30
  • 打赏
  • 举报
回复
/*
--生成某一个表的主键字段的时间流水号(varchar)

declare @NewID varchar(50) ;
exec dbo.Pz_CreateAutoNumber
'CSLY' , 'dbo.TableName' , 'PK_ID' , @NewID output
Select @NewID



*/
ALTER Proc Pz_CreateAutoNumber
@Tag char(1)='' ,
@TableName varchar(50) ,
@MainIDName varchar(50) ,
@NEW_ID varchar(50)='' output AS

BEGIN --=======================================================================



DECLARE @DATE datetime ;
DECLARE @YY VARCHAR(2);
DECLARE @MM VARCHAR(2);
DECLARE @DD VARCHAR(2);
--保存取得的当前时间
SET @DATE = GETDATE() ;
SET @YY = right( DATEPART(yyyy, @DATE) ,2) ;
SET @MM = DATEPART(mm, @DATE) ;
SET @DD = DATEPART(dd, @DATE) ;

--位数不够的前面补0
--SET @YY = REPLICATE('0', 4 - LEN(@YY)) + @YY
SET @MM = REPLICATE('0', 2 - LEN(@MM)) + @MM
SET @DD = REPLICATE('0', 2 - LEN(@DD)) + @DD

--取出表中当前日期的已有的最大ID
SET @NEW_ID = NULL ;

Declare @sql nvarchar(500) ;
Set @sql = N'SELECT TOP 1 @NEW_ID ='+ @MainIDName + ' FROM '+@TableName+' WHERE '+@MainIDName+ ' LIKE '''+ @Tag+@YY+@MM+@DD +'%'' ORDER BY '+@MainIDName+' DESC' ;
exec sp_executesql @sql , N'@NEW_ID VARCHAR(50) output ', @NEW_ID output

--print @NEW_ID ;

--如果未取出来 , 说明还没有当前日期的编号,则直接从1开始编号
IF ( @NEW_ID IS NULL )
Begin
SET @NEW_ID = (@Tag+@YY+@MM+@DD+'00001') ;
End
ELSE --如果取出来了
BEGIN
DECLARE @NUM VARCHAR(5)
--取出最大的编号加上1
SET @NUM = CONVERT(VARCHAR, (CONVERT(INT, RIGHT(@NEW_ID, 5)) + 1)) ;
--因为经过类型转换,丢失了高位的0,需要补上
SET @NUM = REPLICATE('0', 5 - LEN(@NUM)) + @NUM
--最后返回日期加编号
SET @NEW_ID = @Tag+@YY+@MM+@DD + @NUM
END




END --====================================
wuyq11 2010-11-30
  • 打赏
  • 举报
回复
SELECT 'BH'+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6) FROM tb WITH(XLOCK,PAGLOCK)
  • 打赏
  • 举报
回复
[Quote=引用楼主 huyong1978 的回复:]
CSLY001 这种唯一自增编号是怎么自动生成?
前面是公司或产品的缩写,后面的数字,数字要自增,不知道有什么好的方法。

我现在想着就是从代码中获取公司或产品的缩写,再加上数据表中的自增列,最后合并成一个字段,但是这样的话就有一列没有意义的数据。出现两个唯一列
[/Quote]

何必多一个字段?
Ghost_Khz 2010-11-30
  • 打赏
  • 举报
回复
数据库力的字段不搞成自增的 。。 用varchar ,然后CSLY在程序里面拼 , 在插入数据之前先查下数据库,找出最大的,然后在程序里面加1 。。

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧