在SQL Server中创建UUID(唯一标识符)主要有以下几种方法:
- 使用NEWID()函数
这是最常用的生成GUID的方法,会生成一个128位的全局唯一标识符。可以在以下场景使用:
- 作为列默认值:创建表时设置DEFAULT NEWID()
- 在INSERT语句中直接使用:INSERT INTO Table(ID) VALUES(NEWID())
- 通过T-SQL提前获取GUID值
-
使用NEWSEQUENTIALID()函数
与NEWID()类似,但生成的GUID是按顺序的,能减少索引碎片提升性能。只能用作列的DEFAULT值,不能在INSERT语句中直接调用。 -
使用uniqueidentifier数据类型
这是SQL Server中专门存储GUID的数据类型。创建表时可以这样定义:
CREATE TABLE Example ( ID UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY, ... )
- 创建唯一索引
虽然这不是生成UUID的方法,但可以在已包含GUID列的表上创建唯一索引来确保数据唯一性。
注意事项:
- GUID理论上存在碰撞可能,但实际应用中几乎不会发生
- 包含NULL值的列不能创建唯一索引
- 在分布式系统中,GUID比自增ID更适合作为主键
例:创建10位UID
SELECT SUBSTRING(REPLACE(CAST(NEWID() AS VARCHAR(36)), '-', ''), 1, 10) AS ShortUUID
CREATE FUNCTION dbo.fn_GenerateShortUUID()
RETURNS CHAR(10)
AS
BEGIN
RETURN (
SELECT SUBSTRING(REPLACE(CAST(NEWID() AS VARCHAR(36)), '-', ''), 1, 10)
)
END
执行异常:
Invalid use of side-effecting or time-dependent operator in ‘newid’ within a function
--列默认值
CREATE TABLE ExampleTable (
ShortID CHAR(10) DEFAULT
(SUBSTRING(REPLACE(CAST(NEWID() AS VARCHAR(36)), '-', ''), 1, 10)),
-- 其他列...
)