sql - 如何在SQL中自动生成像UID12345678这样的唯一ID?

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

我想自动生成唯一的 ID,并附加每个定义的代码。

例如:

UID12345678
CUSID5000

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

有人有建议吗?

最佳答案

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

  • 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 将包含类似 UID00000001 的值,UID00000002,......等等 - 自动、安全、可靠、无重复。

更新:UserID计算 - 但它仍然当然有一个数据类型,快速查看对象资源管理器即可发现:

enter image description here

关于sql - 如何在SQL中自动生成像UID12345678这样的唯一ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20674282/

相关文章:

sql - 如何从此 SQL 表中删除重复条目?

sql - T-SQL:交叉应用;订单项迭代次数过多

sql-server-2008 - 并排使用 couch db 和 sql server

sql - 无法从 bash 运行 postgresql 脚本

SQL - 返回编号最高的标题

mysql - MySQL 中 COUNT(*) OVER (PARTITION BY mct.MasterTableid) 的替代方法

xml - 在 SQL Server 中解析 XML 的问题

sql - 删除SQL Server 2008中所有非系统对象的脚本

sql - 基于多连接GroupBy子查询的更新表

mysql - SQL:选择文本字段的子字符串比选择整个值更快