如何在 SQL 中自动生成唯一 ID,如 UID12345678?

Posted

技术标签:

【中文标题】如何在 SQL 中自动生成唯一 ID,如 UID12345678?【英文标题】:How to automatically generate unique id in SQL like UID12345678? 【发布时间】:2014-01-07 14:00:46 【问题描述】:

我想自动生成带有每个定义代码的唯一 ID。

例如:

UID12345678
CUSID5000

我尝试了uniqueidentifier 数据类型,但它生成的 id 不适合用户 ID。

大家有什么建议吗?

【问题讨论】:

UID12345678 和 CUSID5000 之间的模式是什么。首先识别唯一 id 的模式,然后相应地创建将返回唯一 id 的 UDF。 thnx @KumarHarsh,你有任何链接或资源可以关注吗?? 【参考方案1】:

我认为唯一可行的解​​决方案是使用

ID INT IDENTITY(1,1) 列让 SQL Server 处理数值的自动递增 一个计算的、持久的列,用于将该数值转换为您需要的值

所以试试这个:

CREATE TABLE dbo.tblUsers
  (ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
   UserID AS 'UID' + RIGHT('00000000' + CAST(ID AS VARCHAR(8)), 8) PERSISTED,
   .... your other columns here....
  )

现在,每次在 tblUsers 中插入一行而不指定 IDUserID 的值时:

INSERT INTO dbo.tblUsersCol1, Col2, ..., ColN)
VALUES (Val1, Val2, ....., ValN)

然后 SQL Server 将自动且安全地增加您的ID 值,而UserID 将包含UID00000001UID00000002、......等值 -自动、安全、可靠、无重复。

更新UserID 列是计算的 - 但它仍然当然具有数据类型 ,快速浏览一下对象资源管理器就会发现:

【讨论】:

第一个 id 必须是 bigint.second 12345678 将如何与您的表生成这样的 UID0000000012345678 。所以它必须是 UDF 和格式 0000... 使用复制。 thax @marc_s,工作没有错误。 :) 另一个小问题 00000000 可以随机生成而不增加?? @KumarHarsh - 你认为UserID AS 'UID' + RIGHT('00000000' + CAST(ID AS VARCHAR(8)), 8) PERSISTED 会做什么? marc_s 我有问题。我无法在另一个引用 User 表的 UID 列的表中创建外键,因为 UID 没有数据类型。如何克服这个问题? @ElhamKohestani:查看我的更新,当然它有一个数据类型!!【参考方案2】:
CREATE TABLE dbo.tblUsers
(
    ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
    UserID AS 'UID' + RIGHT('00000000' + CAST(ID AS VARCHAR(8)), 8) PERSISTED, 
    [Name] VARCHAR(50) NOT NULL,
)

marc_s 的回答快照

【讨论】:

我没有在mysql中尝试过类似的东西。但是你可以问天才@marc_s @MohammedHousseynTaleb:抱歉,我不太了解 MySQL,无法告诉你它是否支持这种东西....但是可以咨询 MySQL 文档 看看有没有!【参考方案3】:

参考:https://docs.microsoft.com/en-us/sql/t-sql/functions/newid-transact-sql?view=sql-server-2017

-- 使用 NEWID 为 uniqueidentifier 数据类型创建表。

CREATE TABLE cust  
(  
 CustomerID uniqueidentifier NOT NULL  
   DEFAULT newid(),  
 Company varchar(30) NOT NULL,  
 ContactName varchar(60) NOT NULL,   
 Address varchar(30) NOT NULL,   
 City varchar(30) NOT NULL,  
 StateProvince varchar(10) NULL,  
 PostalCode varchar(10) NOT NULL,   
 CountryRegion varchar(20) NOT NULL,   
 Telephone varchar(15) NOT NULL,  
 Fax varchar(15) NULL  
);  
GO  
-- Inserting 5 rows into cust table.  
INSERT cust  
(CustomerID, Company, ContactName, Address, City, StateProvince,   
 PostalCode, CountryRegion, Telephone, Fax)  
VALUES  
 (NEWID(), 'Wartian Herkku', 'Pirkko Koskitalo', 'Torikatu 38', 'Oulu', NULL,  
 '90110', 'Finland', '981-443655', '981-443655')  
,(NEWID(), 'Wellington Importadora', 'Paula Parente', 'Rua do Mercado, 12', 'Resende', 'SP',  
 '08737-363', 'Brasil', '(14) 555-8122', '')  
,(NEWID(), 'Cactus Comidas para Ilevar', 'Patricio Simpson', 'Cerrito 333', 'Buenos Aires', NULL,   
 '1010', 'Argentina', '(1) 135-5555', '(1) 135-4892')  
,(NEWID(), 'Ernst Handel', 'Roland Mendel', 'Kirchgasse 6', 'Graz', NULL,  
 '8010', 'Austria', '7675-3425', '7675-3426')  
,(NEWID(), 'Maison Dewey', 'Catherine Dewey', 'Rue Joseph-Bens 532', 'Bruxelles', NULL,  
 'B-1180', 'Belgium', '(02) 201 24 67', '(02) 201 24 68');  
GO

【讨论】:

【参考方案4】:

如果你想手动添加id你可以使用,

PadLeft()String.Format() 方法。

string id;
char x='0';
id=id.PadLeft(6, x);
//Six character string id with left 0s e.g 000012

int id;
id=String.Format("0:000000",id);
//Integer length of 6 with the id. e.g 000012

然后你可以用 UID 附加它。

【讨论】:

【参考方案5】:

表创建

create table emp(eno int identity(100001,1),ename varchar(50))

值插入

insert into emp(ename)values('narendra'),('ajay'),('anil'),('raju')

选择表格

select * from emp

输出

eno     ename
100001  narendra
100002  rama
100003  ajay
100004  anil
100005  raju

【讨论】:

以上是关于如何在 SQL 中自动生成唯一 ID,如 UID12345678?的主要内容,如果未能解决你的问题,请参考以下文章

如何用redis来生成唯一Id

Firebase:如何为键生成唯一的数字 ID?

如何为 PL SQL 中的现有表创建唯一 ID?

如何为每位新访客创建唯一ID?

如何生成唯一的server Id,server_id为何不能重复?

如何在使用 DB2 generate unique() 函数生成的 DB2 表中选择唯一 ID?