27

我有以下 SQL 命令:

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

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

4

2 回答 2

34

看到这个样本:

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

要在填充表上添加非空字段,您需要这个。

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]
于 2012-08-15T18:36:40.430 回答
16

不要newid()默认使用,而是使用newsequentialid()newid()会产生很多碎片,这对索引不利。

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

    ALTER TABLE your_table
    ADD your_column UNIQUEIDENTIFIER DEFAULT newsequentialid() NOT null
于 2012-08-15T19:09:41.197 回答