如何在 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
中插入一行而不指定 ID
或 UserID
的值时:
INSERT INTO dbo.tblUsersCol1, Col2, ..., ColN)
VALUES (Val1, Val2, ....., ValN)
然后 SQL Server 将自动且安全地增加您的ID
值,而UserID
将包含UID00000001
、UID00000002
、......等值 -自动、安全、可靠、无重复。
更新: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?的主要内容,如果未能解决你的问题,请参考以下文章