添加uniqueidentifier列并添加默认值以生成新的guid

ant*_*liu 21 sql sql-server sql-server-2008

我有以下SQL命令:

ALTER TABLE dbo.UserProfiles
ADD ChatId UniqueIdentifier NOT NULL,
UNIQUE(ChatId),
CONSTRAINT "ChatId_default" SET DEFAULT newid()
Run Code Online (Sandbox Code Playgroud)

我希望能够使这个列成为唯一的,并且我希望它能够在每次向表中添加行时生成新的guid.此列不是IDENTITY列,因为我已经有一列.这是分开的.如何将此列添加到已包含用户的表中.

Rog*_*ros 28

看这个样本:

create table test (mycol UniqueIdentifier NOT NULL default newid(), name varchar(100))
insert into test (name) values ('Roger Medeiros')
select * from test
Run Code Online (Sandbox Code Playgroud)

要在填充的表上添加非空字段,您需要这样做.

alter table test add mycol2 UniqueIdentifier NOT NULL default newid() with values

CREATE UNIQUE NONCLUSTERED INDEX IX_test ON dbo.test
(
mycol
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,    ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)


Ica*_*rus 13

不要使用newid()默认值,而是使用newsequentialid().newid()创建了大量碎片,这对索引不利.

至于将新列添加到包含现有数据的表中,只需执行以下操作:

    ALTER TABLE your_table
    ADD your_column UNIQUEIDENTIFIER DEFAULT newsequentialid() NOT null
Run Code Online (Sandbox Code Playgroud)

  • 如果担心隐私,请不要使用newsequentialid().可以猜测下一个生成的GUID的值,因此可以访问与该GUID相关联的访问数据 (12认同)
  • 如果列已编制索引,则碎片只会成为问题. (3认同)