NEWSEQUENTIALID (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

在启动 Windows 后在指定计算机上创建大于先前通过该函数生成的任何 GUID 的 GUID。 在重新启动 Windows 后,GUID 可以再次从一个较低的范围开始,但仍是全局唯一的。 在 GUID 列用作行标识符时,使用 NEWSEQUENTIALID 可能比使用 NEWID 函数的速度更快。 其原因在于,NEWID 函数导致随机行为并且使用更少的缓存数据页。 使用 NEWSEQUENTIALID 还有助于完全填充数据和索引页。

重要

如果涉及保密问题,则不要使用该函数。 因为有可能猜到下一个生成的 GUID 的值,从而访问与该 GUID 关联的数据。

NEWSEQUENTIALID 是 Windows UuidCreateSequential 函数的包装器,应用了某种字节随机排列

警告

UuidCreateSequential 函数具有硬件依赖关系。 在 SQL Server 上,当数据库(如包含的数据库)移动到其他计算机时,可以开发顺序值的群集。 在使用 Always On 以及在 SQL 数据库 上时,如果数据库故障转移到另一台计算机,则可以开发顺序值的群集。

Transact-SQL 语法约定

语法

NEWSEQUENTIALID ( )  

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

返回类型

uniqueidentifier

注解

NEWSEQUENTIALID() 只能与 uniqueidentifier 类型表列上的 DEFAULT 约束一起使用。 例如:

CREATE TABLE myTable (ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID());   

当 NEWSEQUENTIALID() 用于 DEFAULT 表达式时,不能与其他标量运算符结合使用。 例如,您不能执行以下操作:

CREATE TABLE myTable (ColumnA uniqueidentifier DEFAULT dbo.myfunction(NEWSEQUENTIALID()));  

在上一个示例中,myfunction() 是一个由标量用户定义的标题函数,它接受并返回 uniqueidentifier 值。

不能在查询中引用 NEWSEQUENTIALID

可以使用 NEWSEQUENTIALID 生成 GUID 以减少叶级别索引上的页拆分和随机 IO。

使用 NEWSEQUENTIALID 生成的每个 GUID 在该计算机上都是唯一的。 仅当源计算机具有网卡时,使用 NEWSEQUENTIALID 生成的 GUID 在多台计算机上才是唯一的。

另请参阅

NEWID (Transact-SQL)
比较运算符 (Transact-SQL)