顺序NEWID()

nia*_*her 3 sql-server sql-server-2008

我正在使用sql server 2008.有没有办法生成一个唯一的序列号?它应该展示NEWID()和标识列的属性,这意味着它始终是唯一的,但每个后续值都大于前一个值.它不能是datetime/datetime2,因为它不够独特.

谢谢.

Dan*_*llo 7

CREATE TABLE demo_table (
    demo_id    uniqueidentifier NOT NULL,
    demo_value int
);

ALTER TABLE demo_table  ADD CONSTRAINT dc_demo
                        DEFAULT NEWSEQUENTIALID()
                        FOR demo_id;
Run Code Online (Sandbox Code Playgroud)

您必须对顺序uniqueidentifier使用默认约束.

不幸的是,限制NEWSEQUENTIALID()是它不能保证机器重新启动后的顺序.

主要目标NEWSEQUENTIALID()是快速B树插入,机器重启问题不会影响这一点.这在此处记录:

您可以检查此文章约之间的性能比较NEWID(),NEWSEQUENTIALID()以及IDENTITY:" 代码项目:性能比较-标识()×NEWID()×NEWSEQUENTIALID ".

  • newsequentialid()的问题在于它可能在Windows重启后从较低范围开始.在某些情况下,这是不可接受的. (2认同)