怎么样生成不重复的编号

lawbc 2009-03-25 09:36:56
rt
就是我在每次插入数据的时候生成一个编号,要求是不重复的,在数据库(sql)和C#分别是怎么生成的啊
...全文
451 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
tomiji 2009-03-25
  • 打赏
  • 举报
回复
直接用SQL就能全部完成该操作不需要使用后台代码,要是这样你觉得还不够的话,把进行INSET的方法LOCK掉
tomiji 2009-03-25
  • 打赏
  • 举报
回复
DECLARE @ID NVARCHAR(20)
SET @ID = (SELECT RIGHT('000000000'+CONVERT(NVARCHAR(10),COALESCE(MAX(id),0)+1),10) FROM temptb)
INSERT INTO temptb (ID,tbName)
VALUES(@ID,'2')
要是要处理并发,把INSERT的方法进制并发就可以了
lawbc 2009-03-25
  • 打赏
  • 举报
回复
我不是说了不要依赖表的吗,因为这样就要max一下,max在并发的情况下就不好控制了,所以这样做很危险
我之前的编号也是max这样做的,但是总感觉有点不妥,想看看有没有更好的方法
tomiji 2009-03-25
  • 打赏
  • 举报
回复
LZ你是要的是一个可以自己控制的编号,但是在写入数据库的时候不能重复对吧。
我这里有一种做法
SQL语句如下作用,查询结果是数据表中id列(NVARCHAR(19))中最大的一个编号+1;
SELECT RIGHT('000000000'+CONVERT(NVARCHAR(10),COALESCE(MAX(id),0)+1),10) FROM TEST
添加新记录的时候只需要把查询出来的结果跟随新的数据行插入id列中就可以了。
'000000000'部分可以自己控制的格式部分。
具体要看LZ的需要。
benbirdar 2009-03-25
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 benbirdar 的回复:]
引用 16 楼 benbirdar 的回复:
...
格式由程序去控制,根据需要的成都在整数左边或者右边补零或者其它字符。
[/Quote]

格式由程序去控制,根据需要的长度在整数左边或者右边补零或者其它字符。
benbirdar 2009-03-25
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 benbirdar 的回复:]
数据库中设置一个编号字段serialNo,
程序中,在插入数据时,首先判断数据库中的serialNo是否存在,如果不存在,插入的这条数据serialNo赋值为1,
如果serialNo存在,则获取max(serialNo),然后max(serialNo)+1再插入数据库。

如果程序中读取到的serialNo有格式限制,比如需要6位长度,假设取得的serialNo值位12,
那么可以使用如下方式左对齐补0使其凑够6位:

C# code
int serialNo = 12;
string sNo = serialNo…
[/Quote]

补充:一般编号都需要使用000XX这样的格式,数据库中的字段类型设置为int,
即数据库中只存放编号的末尾非零整数部分:XX
格式由程序去控制,根据需要的成都在整数左边或者右边补零或者其它字符。
benbirdar 2009-03-25
  • 打赏
  • 举报
回复
数据库中设置一个编号字段serialNo,
程序中,在插入数据时,首先判断数据库中的serialNo是否存在,如果不存在,插入的这条数据serialNo赋值为1,
如果serialNo存在,则获取max(serialNo),然后max(serialNo)+1再插入数据库。

如果程序中读取到的serialNo有格式限制,比如需要6位长度,假设取得的serialNo值位12,
那么可以使用如下方式左对齐补0使其凑够6位:

int serialNo = 12;
string sNo = serialNo.ToString().PadLeft(6, '0'); //此时 sNo = "000012"
Lisen_1987 2009-03-25
  • 打赏
  • 举报
回复
要生成有规律的,除了自增就只能你自己去控制了
jin225 2009-03-25
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/library/ms173249.aspx
lonelySurvive 2009-03-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 liubiaocai 的回复:]
请问除了自增和guid还有没有什么方法可以生成编号的,因为编号要有一定的规律
[/Quote]

按时间,可以用户名+操作时间

dateTime.Now
WizardWu 2009-03-25
  • 打赏
  • 举报
回复
in SQL Server,
set the column type int with "Identity"

1,2,3,4,5...
qinggeer 2009-03-25
  • 打赏
  • 举报
回复
嗯 ,用uniqueidentifier数据类型
string id = new Guid().ToString();
zzxap 2009-03-25
  • 打赏
  • 举报
回复
用数据库的newid()
lawbc 2009-03-25
  • 打赏
  • 举报
回复
请问除了自增和guid还有没有什么方法可以生成编号的,因为编号要有一定的规律
lonelySurvive 2009-03-25
  • 打赏
  • 举报
回复
数据库使用 uniqueidentifier数据类型

“默认值或绑定”那填写 (newid())

如果用C#代码生成就是

Guid.NewGuid().ToString()
ncowboy 2009-03-25
  • 打赏
  • 举报
回复
两个中你任意用一个。
ncowboy 2009-03-25
  • 打赏
  • 举报
回复
c#
guid
http://msdn.microsoft.com/zh-cn/library/system.guid(VS.80).aspx

sqlserver
newid()
http://msdn.microsoft.com/zh-cn/library/ms173249.aspx
CREATE TABLE myTable(GuidCol uniqueidentifier, NumCol int)
INSERT INTO myTable Values(NEWID(), 4)
SELECT * FROM myTable
kfps8kfps8 2009-03-25
  • 打赏
  • 举报
回复

select newid()



string _id = new Guid().ToString();
coodd 2009-03-25
  • 打赏
  • 举报
回复
主键设成自增的Int或Guid,就自动生成编号了
Jerry_hu 2009-03-25
  • 打赏
  • 举报
回复
GUID
加载更多回复(2)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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