自动生成n位ID号码问题!

a68020405ybcoomy 2007-10-11 04:58:16
我不是太懂数据库
所以问题可能很苯但希望得到帮助,谢谢
如果我想生成一个n位的id号做为primarykey
3个条件
1:用数据库脚本实现,不是用java代码实现,因为代码实现我会
2:n由用户决定,比如我想要求生成3位的就可以生成3位的n的范围可以提前限定 比如规定3-5
3:因为其id作为primarykey不可以重复。
希望会的朋友帮帮忙,感激不尽!
...全文
190 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

--编号表
CREATE TABLE tb_NO(
Name char(2) PRIMARY KEY, --编号种类的名称
Head nvarchar(10) NOT NULL DEFAULT '', --编号的前缀
CurrentNo int NOT NULL DEFAULT 0, --当前编号
BHLen int NOT NULL DEFAULT 6, --编号数字部分长度
DESCRIPTION NVARCHAR(50)) --编号种类说明

INSERT tb_NO SELECT 'CG','CG',0,4,N'采购订单'
UNION ALL SELECT 'CJ','CJ',0,4,N'采购进货'
UNION ALL SELECT 'JC','JC',0,4,N'进仓单'
UNION ALL SELECT 'ZC','ZC',0,4,N'转仓单'
UNION ALL SELECT 'CC','CC',0,4,N'出仓单'
GO

--获取新编号的存储过程
CREATE PROC p_NextBH
@Name char(2), --编号种类
@BH nvarchar(20) OUTPUT --新编号
AS
BEGIN TRAN
UPDATE tb_NO WITH(ROWLOCK) SET
@BH=Head+RIGHT(POWER(10,BHLen)+CurrentNo+1,BHLen),
CurrentNo=CurrentNo+1
WHERE Name=@Name
COMMIT TRAN
GO

--获取 CJ 的新编号
DECLARE @bh char(6)
EXEC p_NextBH 'CJ',@bh OUT
SELECT @bh
--结果: CJ0001

EXEC p_NextBH 'CJ',@bh OUT
SELECT @bh
--结果: CJ0002
GO

--获取 CC 的新编号
DECLARE @bh char(6)
EXEC p_NextBH 'CC',@bh OUT
SELECT @bh
--结果: CC0001

EXEC p_NextBH 'CC',@bh OUT
SELECT @bh
--结果: CC0002
elvis_gao 2007-10-11
  • 打赏
  • 举报
回复
实现你的要求很好用,但是如果规定是整型的数,并且用rand随机生成的,则重复的概率很大的,不可能作为主键用的,你可以用自增的数字,或者你可以用三位字符串,字符串是由字母和数字组成。
给个随机的

declare @n int
set @n=3
if @n=3
begin
select cast((1000)*rand(checksum(newid())) as int) --三位
end
if @n=4
begin
select cast((10000)*rand(checksum(newid())) as int) --四位
end

如果字符与数字的组合
declare @n int
set @n=3
if @n=3
begin
select left(newid(),3) --三位
end
if @n=4
begin
select left(newid(),4) --四位
end

ojuju10 2007-10-11
  • 打赏
  • 举报
回复


create table aa(id varchar(10) )

declare @n int
declare @v varchar(100)

set @n=3
zhai:
select @v=left(rand()*1000000,@n)

if not exists(select 1 from aa where id=@v)
begin
insert into aa select @v
end
else
begin
goto zhai
end
select * from aa

920
695
288
869
432
779
452
a68020405ybcoomy 2007-10-11
  • 打赏
  • 举报
回复
还有个重要的就是说是MySQL数据库5.2
不是图形操作的.是命令操作的!

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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