用SQL SERVER怎么自动生成8位的ID

QQ7300 2009-07-11 10:27:54
我想要用个8位的ID

用SQL SERVER怎么自动生成这个ID?

我用的是SQL SERVER 2005
...全文
726 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
exinke 2009-07-12
  • 打赏
  • 举报
回复
如果使用数据库自动生成,必须保证"唯一性"吧!
所以,楼主还是得说明“生成规则”!
百年树人 2009-07-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 qq7300 的回复:]
引用 3 楼 qq7300 的回复:
比如,我有个User表,里面有个userID;
例如有个userID为: A3E6-O5DB。

我想插入记录时,不用自己输入ID的值,而是由数据库自动
生成一个这种类型的ID。


uniqueidentifier是16位的,我用不着这长的,只要8位。
[/Quote]

create table Users 
(userID as left(newid(),8),username varchar(30)
)

insert users select 'QQ7300'

select * from users

drop table users

/**
userID username
---------------- ------------------------------
92EDD43B QQ7300

(所影响的行数为 1 行)
**/
jiangshun 2009-07-11
  • 打赏
  • 举报
回复
--取得随机数的视图
CREATE VIEW v_RAND
AS
SELECT re=STUFF(RAND(),1,2,'')
GO

--生成随机编号的函数
CREATE FUNCTION f_RANDBH(@BHLen int)
RETURNS varchar(50)
AS
BEGIN
DECLARE @r varchar(50)
IF NOT(ISNULL(@BHLen,0) BETWEEN 1 AND 50)
SET @BHLen=10

lb_bh: --生成随机编号的处理
SELECT @r=re FROM v_RAND
WHILE LEN(@r)<@BHLen
SELECT @r=@r+re FROM v_RAND
SET @r=LEFT(@r,@BHLen)

--检查编号在基础数据表中是否存在
IF EXISTS(SELECT * FROM tb WITH(XLOCK,PAGLOCK) WHERE BH=@r)
GOTO lb_bh

RETURN(@r)
END
GO

--创建引用生成随机编号的函数
CREATE TABLE tb(
BH char(10) PRIMARY KEY DEFAULT dbo.f_RANDBH(10),
col int)

--插放数据
BEGIN TRAN
INSERT tb(col) VALUES(1)
INSERT tb(col) VALUES(2)
INSERT tb(col) VALUES(3)
COMMIT TRAN
SELECT * FROM tb
GO
/*--结果
BH col
------------------------------ -----------
6128177354 1
7378536177 3
8387186129 2
--*/
QQ7300 2009-07-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qq7300 的回复:]
比如,我有个User表,里面有个userID;
例如有个userID为: A3E6-O5DB。

我想插入记录时,不用自己输入ID的值,而是由数据库自动
生成一个这种类型的ID。
[/Quote]

uniqueidentifier是16位的,我用不着这长的,只要8位。
jiangshun 2009-07-11
  • 打赏
  • 举报
回复
select left( abs(checksum(newid())) ,8)

/*

----------------
93834026

(所影响的行数为 1 行)
*/
wuguanlin 2009-07-11
  • 打赏
  • 举报
回复
create table User
(userID uniqueidentifier
)
QQ7300 2009-07-11
  • 打赏
  • 举报
回复
比如,我有个User表,里面有个userID;
例如有个userID为: A3E6-O5DB。

我想插入记录时,不用自己输入ID的值,而是由数据库自动
生成一个这种类型的ID。
百年树人 2009-07-11
  • 打赏
  • 举报
回复
select left(newid(),8)

/**

----------------
D29F27FA
011F4A71
1AB0018D
3ED9909D
**/
feixianxxx 2009-07-11
  • 打赏
  • 举报
回复
举个例子、
。。。

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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