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

时间:2013-12-19 05:45:10

标签: sql sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012

我希望自动生成唯一ID,并为其定义每个定义的代码。

前:

UID12345678
CUSID5000

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

有人有建议吗?

5 个答案:

答案 0 :(得分:28)

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

  • 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已计算 - 但仍然 OF COURSE 数据类型,快速查看对象资源管理器显示:

enter image description here

答案 1 :(得分: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's Answer Snap

marc_s的答案Snap

答案 2 :(得分:0)

如果您想手动添加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附加它。

答案 3 :(得分:0)

参考: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 :(得分:-1)

' - >表创建 create table emp(eno int identity(100001,1),ename varchar(50))

- >值插入 插入emp(ename)值('narendra'),('ajay'),('anil'),('raju')

- >选择表格 从emp中选择* - >输出 eno ename 100001 narendra 100002 rama 100003 ajay 100004 anil 100005 raju'