介绍
NEWID() 是 SQL Server 中用于生成全局唯一标识符(GUID) 的系统函数。
- 返回值类型:
UNIQUEIDENTIFIER - 格式示例:
6F9619FF-8B86-D011-B42D-00C04FC964FF(36个字符,含4个连字符) - 核心特点:
- 基于网卡MAC地址、时间戳等生成,理论上全球唯一
- 随机性强,值不可推测
- 无顺序性(无序GUID),不适合作为聚集索引键(会导致频繁页分裂)
- 主要用途:
- 作为分布式系统的主键
- 生成随机排序(
ORDER BY NEWID()) - 随机抽样
- 简单用法:
SELECT NEWID(); -- 直接生成一个GUID
CREATE TABLE T (ID UNIQUEIDENTIFIER DEFAULT NEWID());

💡 如需有序GUID(利于索引),可用
NEWSEQUENTIALID()。
案例
1. 为表中的每一行生成随机排序
-- 按随机顺序返回员工列表
SELECT
[员工编号],
[名字],
[姓氏]
FROM
[员工表]
ORDER BY
NEWID();
2. 从表中随机抽取指定数量的行
-- 随机抽取 10 个订单
SELECT TOP 10
[订单编号],
[客户编号],
[订单日期]
FROM
[订单表]
ORDER BY
NEWID();
-- 随机抽取 5% 的产品
SELECT TOP 5 PERCENT
[产品编号],
[产品名称]
FROM
[产品表]
ORDER BY
NEWID();
3. 插入数据时自动生成唯一标识符
-- 创建表时将 [用户标识] 默认值设为 NEWID()
CREATE TABLE [用户表] (
[用户标识] UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY,
[用户名] NVARCHAR(100)
);
-- 插入时无需指定 [用户标识]
INSERT INTO [用户表] ([用户名]) VALUES ('张三'), ('李四');
-- 插入时显式生成
INSERT INTO [用户表] ([用户标识], [用户名])
VALUES (NEWID(), '王五');
4. 使用 NEWID() 配合 CHECKSUM 生成随机整数
-- 生成 1 到 100 之间的随机整数
SELECT
ABS(CHECKSUM(NEWID())) % 100 + 1 AS [随机数字];
-- 为表中的每行生成一个 1~100 的随机分数
SELECT
[产品编号],
[产品名称],
ABS(CHECKSUM(NEWID())) % 100 + 1 AS [随机分数]
FROM
[产品表];
5. 更新现有表中的 GUID 列
-- 为没有 GUID 的记录生成唯一值
UPDATE [产品表]
SET [产品全局标识] = NEWID()
WHERE [产品全局标识] IS NULL;
6. 在查询中生成临时唯一标识
-- 为查询结果额外增加一列随机唯一值
SELECT
[客户编号],
[公司名称],
NEWID() AS [临时行标识]
FROM
[客户表];
7. 与 ROW_NUMBER() 结合生成自增序号 + 随机标识
SELECT
ROW_NUMBER() OVER (ORDER BY [客户编号]) AS [序号],
NEWID() AS [随机GUID],
[客户名称]
FROM
[客户表];
📌 使用中文命名时的注意事项
- 必须使用方括号
[]包裹中文表名或字段名,否则 SQL Server 会报语法错误。 - 如果不加括号,也可用双引号(需设置
QUOTED_IDENTIFIER ON),但方括号是 SQL Server 的标准做法。 - 示例中的表名(如
[员工表])及字段名可根据您实际的数据库对象名称进行替换。
相关文章
本文关键词:随机,排序,生成,唯一码


请登录后查看回复内容