关于生成四位的流水号(asp.net)

时间:2022-04-12 20:41:30
1.生成如下4位流水号 ,0001,0002,0003,....后面未知多少个
2.现在有ID,NO,两个字段,ID自增1,2,3....,要求NO(0001,0002....)和ID的数保持一致,不足四位前面补0,怎么实现啊?
在下恭候各位的回答了...菜鸟等待ING.....

18 个解决方案

#1


生成这样的流水号不难,难的是并发
string strNum="3"
if(strNum.Length==1)
{
 strNum="000"+strNum;
}
if(strNum.Length==2)
{
 strNum="00"+strNum;
}
if(strNum.Length==3)
{
 strNum="0"+strNum;
}
if(strNum.Length==4)
{
 strNum=strNum;
}

#2


学习了

#3


NO直接用数据库的公式字段就行了

#4


小于10000也可以滴......

#5


引用 1 楼 zzxap 的回复:
生成这样的流水号不难,难的是并发
string strNum="3"
if(strNum.Length==1)
{
strNum="000"+strNum;
}
if(strNum.Length==2)
{
strNum="00"+strNum;
}
if(strNum.Length==3)
{
strNum="0"+strNum;
}
if(strNum.Length==4)
{
strNum=strNum;
}



string strNum="3"
if(strNum.Length==1)
{
strNum="000"+ID;
}
if(strNum.Length==2)
{
strNum="00"+ID;
}
if(strNum.Length==3)
{
strNum="0"+ID;
}
if(strNum.Length==4)
{
strNum=convert.toint32(strNum)+id;
}


这样是否可以 

#6


引用楼主 wjy_1988 的回复:
1.生成如下4位流水号 ,0001,0002,0003,....后面未知多少个
2.现在有ID,NO,两个字段,ID自增1,2,3....,要求NO(0001,0002....)和ID的数保持一致,不足四位前面补0,怎么实现啊?
在下恭候各位的回答了...菜鸟等待ING.....

难倒是不难,有并发就麻烦了。

select right('0000'+cast(1 as varchar(4)),4)
select right('0000'+cast(9999 as varchar(4)),4)
/*
         
-------- 
0001

(所影响的行数为 1 行)

         
-------- 
9999

(所影响的行数为 1 行)
*/

#7


大家说的都有道理,可是我想的是怎么样先取出数据库里面最大的ID,然后在次基础上生成(保持4位数)流水号,再递增1;如当前id是13,那么我先取出这个13,然后id=13 ,再+1 ,ID为14,然后不足四位补“0”变成0014;依照此理,再生成0015....0099...0100等等。每个数之间都是递增的

#8


引用 7 楼 wjy_1988 的回复:
大家说的都有道理,可是我想的是怎么样先取出数据库里面最大的ID,然后在次基础上生成(保持4位数)流水号,再递增1;如当前id是13,那么我先取出这个13,然后id=13 ,再+1 ,ID为14,然后不足四位补“0”变成0014;依照此理,再生成0015....0099...0100等等。每个数之间都是递增的


select  top  1 id from  table  order  by  id  asc

查出最大id后,。。。。

#9


string No=id.ToString("0000")

#10


顶上。。

#11


我有一个问题没有搞清楚,你是打算让数据库自动生成,还是打算用代码生成,然后把代码生成的数据插入到数据库中?

#12


引用 5 楼 class_error 的回复:
引用 1 楼 zzxap 的回复:
生成这样的流水号不难,难的是并发
string strNum="3"
if(strNum.Length==1)
{
strNum="000"+strNum;
}
if(strNum.Length==2)
{
strNum="00"+strNum;
}
if(strNum.Length==3)
{
strNum="0"+strNum;
}
if(strNum.Length==4)
{
strNum=strNum;
}



string strNum="3"
if(strNum.Length==1)
{
strNum="000"+ID;
}
if(strNum.Length==2)
{
strNum="00"+ID;
}
if(strNum.Length==3)
{
strNum="0"+ID;
}
if(strNum.Length==4)
{
strNum=convert.toint32(strNum)+id;
}


这样是否可以



你这个不是一个道理吗?晕 

#13


strNum=convert.toint32(strNum)+id; 
你这句话错了 刚刚没看清出.. 你是string的strNum怎么转换成convert.toInt32()后又加了ID的字符串  这就话肯定是错的了...呵呵

#14


1. select max(id) as id from 表名
2. string strId= id.toString(); //转换id为string类型
3. strId=strId.PadLeft(4,'0'); //不足4位前面补‘0’

#15


忘了+ 1  2.  改为  string strId= (id+1).toString;//id+1后转为 string 类型

#16


或者 直接用在sql语句中计算获取:
select right(10000+max(id)+1,4) as NO from 表名
获得的 NO 既是 前面补足4位 的 NO号。
如 当前最大id号是13【max(id)】 10000+13+1=10014 right取右边的4位既 0014
注意:10000 这个数的‘0’的个数 一定要 >= 4

#17


如果你要在插入数据时就生成该流水号,可以下面语法:
INSERT INTO 表名(no) values(right('0000'+cast(@@identity as nvarchar))

#18


应该是
INSERT INTO 表名(no) values(right('0000'+cast(@@identity as nvarchar),4))


引用 17 楼 edward8819 的回复:
如果你要在插入数据时就生成该流水号,可以下面语法:
INSERT INTO 表名(no) values(right('0000'+cast(@@identity as nvarchar))

#1


生成这样的流水号不难,难的是并发
string strNum="3"
if(strNum.Length==1)
{
 strNum="000"+strNum;
}
if(strNum.Length==2)
{
 strNum="00"+strNum;
}
if(strNum.Length==3)
{
 strNum="0"+strNum;
}
if(strNum.Length==4)
{
 strNum=strNum;
}

#2


学习了

#3


NO直接用数据库的公式字段就行了

#4


小于10000也可以滴......

#5


引用 1 楼 zzxap 的回复:
生成这样的流水号不难,难的是并发
string strNum="3"
if(strNum.Length==1)
{
strNum="000"+strNum;
}
if(strNum.Length==2)
{
strNum="00"+strNum;
}
if(strNum.Length==3)
{
strNum="0"+strNum;
}
if(strNum.Length==4)
{
strNum=strNum;
}



string strNum="3"
if(strNum.Length==1)
{
strNum="000"+ID;
}
if(strNum.Length==2)
{
strNum="00"+ID;
}
if(strNum.Length==3)
{
strNum="0"+ID;
}
if(strNum.Length==4)
{
strNum=convert.toint32(strNum)+id;
}


这样是否可以 

#6


引用楼主 wjy_1988 的回复:
1.生成如下4位流水号 ,0001,0002,0003,....后面未知多少个
2.现在有ID,NO,两个字段,ID自增1,2,3....,要求NO(0001,0002....)和ID的数保持一致,不足四位前面补0,怎么实现啊?
在下恭候各位的回答了...菜鸟等待ING.....

难倒是不难,有并发就麻烦了。

select right('0000'+cast(1 as varchar(4)),4)
select right('0000'+cast(9999 as varchar(4)),4)
/*
         
-------- 
0001

(所影响的行数为 1 行)

         
-------- 
9999

(所影响的行数为 1 行)
*/

#7


大家说的都有道理,可是我想的是怎么样先取出数据库里面最大的ID,然后在次基础上生成(保持4位数)流水号,再递增1;如当前id是13,那么我先取出这个13,然后id=13 ,再+1 ,ID为14,然后不足四位补“0”变成0014;依照此理,再生成0015....0099...0100等等。每个数之间都是递增的

#8


引用 7 楼 wjy_1988 的回复:
大家说的都有道理,可是我想的是怎么样先取出数据库里面最大的ID,然后在次基础上生成(保持4位数)流水号,再递增1;如当前id是13,那么我先取出这个13,然后id=13 ,再+1 ,ID为14,然后不足四位补“0”变成0014;依照此理,再生成0015....0099...0100等等。每个数之间都是递增的


select  top  1 id from  table  order  by  id  asc

查出最大id后,。。。。

#9


string No=id.ToString("0000")

#10


顶上。。

#11


我有一个问题没有搞清楚,你是打算让数据库自动生成,还是打算用代码生成,然后把代码生成的数据插入到数据库中?

#12


引用 5 楼 class_error 的回复:
引用 1 楼 zzxap 的回复:
生成这样的流水号不难,难的是并发
string strNum="3"
if(strNum.Length==1)
{
strNum="000"+strNum;
}
if(strNum.Length==2)
{
strNum="00"+strNum;
}
if(strNum.Length==3)
{
strNum="0"+strNum;
}
if(strNum.Length==4)
{
strNum=strNum;
}



string strNum="3"
if(strNum.Length==1)
{
strNum="000"+ID;
}
if(strNum.Length==2)
{
strNum="00"+ID;
}
if(strNum.Length==3)
{
strNum="0"+ID;
}
if(strNum.Length==4)
{
strNum=convert.toint32(strNum)+id;
}


这样是否可以



你这个不是一个道理吗?晕 

#13


strNum=convert.toint32(strNum)+id; 
你这句话错了 刚刚没看清出.. 你是string的strNum怎么转换成convert.toInt32()后又加了ID的字符串  这就话肯定是错的了...呵呵

#14


1. select max(id) as id from 表名
2. string strId= id.toString(); //转换id为string类型
3. strId=strId.PadLeft(4,'0'); //不足4位前面补‘0’

#15


忘了+ 1  2.  改为  string strId= (id+1).toString;//id+1后转为 string 类型

#16


或者 直接用在sql语句中计算获取:
select right(10000+max(id)+1,4) as NO from 表名
获得的 NO 既是 前面补足4位 的 NO号。
如 当前最大id号是13【max(id)】 10000+13+1=10014 right取右边的4位既 0014
注意:10000 这个数的‘0’的个数 一定要 >= 4

#17


如果你要在插入数据时就生成该流水号,可以下面语法:
INSERT INTO 表名(no) values(right('0000'+cast(@@identity as nvarchar))

#18


应该是
INSERT INTO 表名(no) values(right('0000'+cast(@@identity as nvarchar),4))


引用 17 楼 edward8819 的回复:
如果你要在插入数据时就生成该流水号,可以下面语法:
INSERT INTO 表名(no) values(right('0000'+cast(@@identity as nvarchar))