Добавление столбца uniqueidentifier и добавление по умолчанию для создания нового guid

У меня есть следующая команда SQL:

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

Я хочу, чтобы этот столбец был уникальным, и я хочу, чтобы он мог генерировать новый guid каждый раз, когда строка добавляется в таблицу. Этот столбец не является столбцом IDENTITY, потому что у меня его уже есть. Это нечто отдельное. Как я могу добавить этот столбец в таблицу с уже существующими пользователями.

Ответы

Ответ 1

см. этот пример:

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]

Ответ 2

Не используйте newid() по умолчанию, вместо этого используйте newsequentialid(). newid() создает много фрагментации и это плохо для индексов.

Что касается добавления нового столбца в таблицу с существующими данными, просто выполните следующее:

    ALTER TABLE your_table
    ADD your_column UNIQUEIDENTIFIER DEFAULT newsequentialid() NOT null