Добавление столбца 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