我有以下SQL命令:
ALTER TABLE dbo.UserProfiles
ADD ChatId UniqueIdentifier NOT NULL,
UNIQUE(ChatId),
CONSTRAINT "ChatId_default" SET DEFAULT newid()
我希望能够使此列唯一,并且我希望每次向表中添加行时都能生成新的guid。此列不是IDENTITY列,因为我已经有一列。这是分开的。如何将此列添加到已包含用户的表中。
答案 0 :(得分:27)
请参阅此示例:
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]
答案 1 :(得分:13)
请勿使用newid()
作为默认值,而是使用newsequentialid()。 newid()
会产生大量碎片,这对索引很不利。
只要将新列添加到包含现有数据的表中,只需执行以下操作:
ALTER TABLE your_table
ADD your_column UNIQUEIDENTIFIER DEFAULT newsequentialid() NOT null