在SQL Server中创建UUID(唯一标识符)

在SQL Server中创建UUID(唯一标识符)主要有以下几种方法:

  1. 使用NEWID()函数
    这是最常用的生成GUID的方法,会生成一个128位的全局唯一标识符。可以在以下场景使用:
  • 作为列默认值:创建表时设置DEFAULT NEWID()
  • 在INSERT语句中直接使用:INSERT INTO Table(ID) VALUES(NEWID())
  • 通过T-SQL提前获取GUID值
  1. 使用NEWSEQUENTIALID()函数
    与NEWID()类似,但生成的GUID是按顺序的,能减少索引碎片提升性能。只能用作列的DEFAULT值,不能在INSERT语句中直接调用。

  2. 使用uniqueidentifier数据类型
    这是SQL Server中专门存储GUID的数据类型。创建表时可以这样定义:

CREATE TABLE Example ( ID UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY, ... )

  1. 创建唯一索引
    虽然这不是生成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)),
    -- 其他列...
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值